外星人大战---------------------游戏开发

因为基本知识已经学习的差不多了,做三个实例更加上手学习,第一个实例是游戏开发,外星人,第二个是数据处理,第三个是web开发,这一个月尽量完成第一个实例。


首先对于游戏开发,会经常使用pygame模块,安装教程我已经在前面提到过了。

1.第一步先创建一个空的游戏窗口,用于后面的外星人,飞船等

import sys     #退出时需要这个模块
import pygame  #导入游戏模块
def run_game():pygame.init()  #初始化,创建屏幕对象screen=pygame.display.set_mode((800,800))  #创建一个800*800的屏幕pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasion"开始游戏的主代码循环"while True:for event in pygame.event.get():     #监听键盘和鼠标,规定退出的情况if event.type==pygame.QUIT:sys.exit()    pygame.display.flip()     #让屏幕可见
run_game()

首先导入sys、pygame 模块 ,定义运行函数,初始化,定义游戏屏幕的大小以及名称,然后再开始编写游戏代码,刚开始最简单的情况,监听键盘和鼠标的动作,退出情况的编程,这就搭建好了一个简单的游戏框架,现在就是需要把刚刚做的屏幕可见,能运行出来让用户看到。最后运行程序。

输出如下:

对于屏幕,我们也可以修改屏幕背景颜色:

import sys     #退出时需要这个模块
import pygame  #导入游戏模块
def run_game():pygame.init()  #初始化,创建屏幕对象screen=pygame.display.set_mode((800,800))  #创建一个800*800的屏幕pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasionbg_color=(230,230,230)  #设置背景颜色,红绿蓝,0——255的取值范围"开始游戏的主代码循环"while True:for event in pygame.event.get():     #监听键盘和鼠标,规定退出的情况if event.type==pygame.QUIT:sys.exit() screen.fill(bg_color)  pygame.display.flip()    #让屏幕可见,刷新屏幕
run_game()

首先在初始化里设置背景颜色,采用红绿蓝RGB,每个值得取值范围在0-255,其次在刷新屏幕的时候接受背景颜色的实参,填充屏幕。

输出如下:这里我修改了代码,是

如何简化 代码,我们可以把设置。功能分模块;这样也好维护,利于程序员修改程序:

把游戏里设置放在setting类里,我们创建一个Setting:

#存储外星人游戏开发的设置
class Setting():def __init__(self):self.screen_width=800      #设置屏幕高度宽度,背景颜色self.screen_height=800self.bg_color=(230,230,230)

在主程序里修改代码:

import sys     #退出时需要这个模块
import pygame  #导入游戏模块
from setting import Setting    #导入设置类def run_game():pygame.init()  #初始化,创建屏幕对象ai_settings=Setting()    #创建一个800*800的屏幕screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))  pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasion"开始游戏的主代码循环"while True:for event in pygame.event.get():     #监听键盘和鼠标,规定退出的情况if event.type==pygame.QUIT:sys.exit()  screen.fill(ai_settings.bg_color)pygame.display.flip()    #让屏幕可见,刷新屏幕
run_game()

输出如下:

2.在第一步绘制好的屏幕里添加图像

在游戏里最好再用位图(.bmp),这是Python默认的加载方法,一般图片资源文件建立一个文件夹,放在项目文件夹下。我们来创建一个Ship的类,用于表示飞船的图片。

#创建飞船类
import pygameclass Ship(): def __init__(self,screen):self.screen=screen#图片存在images文件夹下,名字是ship.bmp    self.image=pygame.image.load('images/ship.bmp')  self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomdef blitme(self):self.screen.blit(self.image,self.rect)   

对于这个类,首先我们通过pygame.image.load()加载图像,然后定义屏幕的rect和图片的rect,在定义图片的rect位于屏幕的rect哪里。

接着编写主程序

import sys     #退出时需要这个模块
import pygame  #导入游戏模块
from setting import Setting    #导入设置类
from ship import Ship   #导入飞船类def run_game():pygame.init()  #初始化,创建屏幕对象ai_settings=Setting()    #创建一个800*800的屏幕screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))  pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasionship=Ship(screen)   #创建飞船"开始游戏的主代码循环"while True:for event in pygame.event.get():     #监听键盘和鼠标,规定退出的情况if event.type==pygame.QUIT:sys.exit()  screen.fill(ai_settings.bg_color)ship.blitme()   pygame.display.flip()    #让屏幕可见,刷新屏幕
run_game()

输出如下:

3.完全重构整个函数:

发现主程序里有很多功能函数,我们可以创建一个功能的模块game_functions

#游戏的功能模块,包括响应键盘鼠标事件,移动飞船等import sys
import pygamedef check_events():     #响应键盘和鼠标事件for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit() def update_screen(ai_settings,screen,ship):   # 更新屏幕screen.fill(ai_settings.bg_color)ship.blitme()pygame.display.flip()

创建了两个功能函数,一个响应键盘和鼠标事件,一个更新屏幕。

编写主程序:

import pygamefrom settings import Setting
from ship import Ship
import game_functions as gfdef run_game():pygame.init()  #初始化,创建屏幕对象ai_settings=Setting()    #创建一个800*800的屏幕screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))  pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasionship=Ship(screen)   #创建飞船while True:gf.check_events()gf.update_screen(ai_settings,screen,ship)run_game()

 输出如下:

4.驾驶飞船

前面我们已将简单搭建好游戏屏幕以及飞船,现阶段就是移动飞船,实现动态过程。

先简单的右移动,每当用户点击键盘的时候都会在pygame里注册一个事件,事件是通过pygame.event.get()获取的,在功能模块监听键盘事件:

#游戏的功能模块,包括响应键盘鼠标事件,移动飞船等import sys
import pygamedef check_events(ship):     #响应键盘和鼠标事件for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit() elif event.type==pygame.KEYDOWN:   #监测是否为右键if event.key==pygame.K_RIGHT:ship.rect.centerx+=1
def update_screen(ai_settings,screen,ship):   # 更新屏幕screen.fill(ai_settings.bg_color)ship.blitme()pygame.display.flip()

主程序如下:

import pygamefrom setting import Setting
from ship import Ship
import game_functions as gfdef run_game():pygame.init()  #初始化,创建屏幕对象ai_settings=Setting()    #创建一个800*800的屏幕screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))  pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasionship=Ship(screen)   #创建飞船while True:gf.check_events(ship)gf.update_screen(ai_settings,screen,ship)run_game()

输出如下:这是我按下右键后的位置 

但是这只能一点一点移动,不能长按右键移动,可以这样想,既然按下键盘就注册一个事件,那么我长按右键盘,当我放开键盘是就是一个状态,在我不放开的键盘的这段时间里可以一直循环。所以建立一个标志moving_right,在飞船不动的时候,设为False,在按下右键盘的时候设为True,在松开的时候设为FALSE,因为这是飞船的特性,我们把代码写入Ship类

#创建飞船类
import pygameclass Ship(): def __init__(self,screen):self.screen=screen#图片存在images文件夹下,名字是ship.bmp    self.image=pygame.image.load('images/ship.bmp')  self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomself.moving_right=False            #设置移动标志def update(self):if self.moving_right:        #根据移动标志,来调整位置self.rect.centerx+=1def blitme(self):self.screen.blit(self.image,self.rect)   

接下来再把按下键盘的一系列代码写入功能类:

#游戏的功能模块,包括响应键盘鼠标事件,移动飞船等import sys
import pygamedef check_events(ship):     #响应键盘和鼠标事件for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit() elif event.type==pygame.KEYDOWN:     #监测是否为右键if event.key==pygame.K_RIGHT:ship.moving_right=True    #改变标志位elif event.type==pygame.KEYUP:       #监测是否放开键盘if event.key==pygame.K_RIGHT:ship.moving_right=Falsedef update_screen(ai_settings,screen,ship):   # 更新屏幕screen.fill(ai_settings.bg_color)ship.blitme()pygame.display.flip()

接下来是主程序:

import pygamefrom setting import Setting
from ship import Ship
import game_functions as gfdef run_game():pygame.init()  #初始化,创建屏幕对象ai_settings=Setting()    #创建一个800*800的屏幕screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))  pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasionship=Ship(screen)   #创建飞船while True:gf.check_events(ship)ship.update()gf.update_screen(ai_settings,screen,ship)run_game()

 输出如下:当我按下右键盘,持续移动。

之前都是右移动,那么左移动也是一样的,现在完成左右移动的方法

A.修改Ship类:

#创建飞船类
import pygameclass Ship(): def __init__(self,screen):self.screen=screen#图片存在images文件夹下,名字是ship.bmp    self.image=pygame.image.load('images/ship.bmp')  self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomself.moving_right=False            #设置移动标志self.moving_left=Falsedef update(self):if self.moving_right:        #根据移动标志,来调整位置self.rect.centerx+=1if self.moving_left:self.rect.centerx-=1def blitme(self):self.screen.blit(self.image,self.rect)  

 再修改功能类:

#游戏的功能模块,包括响应键盘鼠标事件,移动飞船等import sys
import pygamedef check_events(ship):     #响应键盘和鼠标事件for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit() elif event.type==pygame.KEYDOWN:     #监测是否为右键if event.key==pygame.K_RIGHT:ship.moving_right=True    #改变标志位elif event.key==pygame.K_LEFT:ship.moving_left=Trueelif event.type==pygame.KEYUP:       #监测是否放开键盘if event.key==pygame.K_RIGHT:ship.moving_right=Falseelif event.key==pygame.K_LEFT:ship.moving_left=Falsedef update_screen(ai_settings,screen,ship):   # 更新屏幕screen.fill(ai_settings.bg_color)ship.blitme()pygame.display.flip()

主程序不变:

import pygamefrom setting import Setting
from ship import Ship
import game_functions as gfdef run_game():pygame.init()  #初始化,创建屏幕对象ai_settings=Setting()    #创建一个800*800的屏幕screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))  pygame.display.set_caption("Alien Invasion")   #对于这个窗口的命名为Alien Invasionship=Ship(screen)   #创建飞船while True:gf.check_events(ship)ship.update()gf.update_screen(ai_settings,screen,ship)run_game()

因为这是动态效果,就不截图了,自己验证过是OK的。

这是一次简单的移动效果。接下来的放入下节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11099.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

波克城市:从Impala到StarRocks,让游戏分析焕发新活力

作者:波克城市大数据平台部门 波克科技股份有限公司(以下简称“波克城市”)成立于 2010 年,立足于精品休闲游戏的全球化研发、发行,旗下拥有《爆炒江湖》《我是航天员》《猫咪公寓》等精品休闲游戏,连续五年…

一个人把数学建模比赛打完 520特辑

导读340s## 一个人把数学建模比赛打完 高中生也能听懂的教程 一个记笔记的工具分享:https://pan.baidu.com/s/1lfVn8xa-3xpJnDUVBtdqNQ?pwdv3fk 【https://www.bilibili.com/video/BV1zX4y1X73T/?spm_id_from333.337.search-card.all.click&vd_source6ff28d…

网络安全学术顶会——SP 2023 议题清单、摘要与总结(中)

注:本文由ChatGPT与Claude联合生成 51、Effective ReDoS Detection by Principled Vulnerability Modeling and Exploit Generation 正则表达式拒绝服务攻击(ReDoS)是一种算法复杂度攻击。对于易受攻击的正则表达式,攻击者可以精心…

网络安全学术顶会——CCS '22 议题清单、摘要与总结(上)

注意:本文由GPT4与Claude联合生成。 按语:ChatGPT在计算机领域的翻译质量还是欠缺一些,翻译出来的中文有的不够自然,经常完全按照英文的表达方式来,导致中文特别长,很绕。GPT4的翻译效果相对ChatGPT效果要好…

李开复新公司正式上线!强啊!

点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 就在昨天,李开复麾下大模型公司的官网正式上线了。 名为:零一万物。 而且官方域名可以说非常有个性&…

#Microsoft Edge功能测评!# 关于Edge浏览器以及插件推荐

关于Edge浏览器以及插件推荐 1.关于Microsoft Edge......1.1 什么是Microsoft Edge1.2Microsoft Edge的优势 2.Microsoft Edge的分屏功能2.1 如何分屏?2.2分屏的优势 3.Microsoft Edge插件推荐3.1 AIX智能下载器(图片/视频/音乐/文档)3.2 AdGuard 广告拦截器3.3 破解…

ChatGPT、文心一言、New Bing介绍,以及如何选用。新时代,起风了

这里写自定义目录标题 ChatGPT平台介绍特点 New Bing平台介绍特点 文心一言平台介绍特点 总结 随着互联网、物联网技术的发展,人工智能在各行各业中的应用越来越广泛,同时也取得了突破性的进展。以微软小冰为例,它最初只能进行简单的对话&…

百度文心一言可以完胜ChatGPT的4点可能性

文心一言,百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。但说实话,很多人拿他与ChatGPT相对比&#x…

上手使用百度文心一言

3月16日,在距离新一代的GPT模型GPT-4发布还不足一天的时间内,百度便发布了对标ChatGPT的人工智能产品,名字叫:文心一言。成为国内首页发布该类型产品的公司。 那么,我们今天就来试一试百度的文心一言好不好用。 首先&a…

文心一言 VS ChatGpt

介绍 百度刚推出的文心一言,我们拿到了内测码。来从对比分析、市场预测、文档编写测试一下两个模型。国产AI到底怎么样我们往下看。 对比分析 市场分析 文档编写 总结 其实简单从这三个方便我们就能观察出一点东西,国产AI还需要一段路程要走。但也不是…

浅谈chatGPT——百度文心一言

等了好久终于等到了测试名额,真的有一些意外。从去年chatGPT发布,自然语言处理一下子又火热了起来。还记得研究生期间的方向就是自然语言处理,虽然那是几年前的事了,那时候就想过会有一天机器能“听懂”人类的语言,只是…

chatgpt VS 文心一言使用对比实测

chatgpt VS 文心一言使用对比实测 什么是文心一言 文心一言(英语:ERNIE Bot)是由百度公司开发的聊天机器人,能够与人交互、回答问题及协作创作。该产品被传媒称为国际著名聊天机器人ChatGPT的中国版及其竞争对手[1][2]。目前已开…

ChatGpt vs 文心一言,谁更厉害

前言 ​ 当下最火的人工智能毫无疑问是大模型的聊天机器人,ChatGpt的出现,让无数人为之惊叹,它聪明、逻辑清晰、又什么都懂,甚至被人们认为是第四次工业革命的开端。AI的大模型之争,美国的OpenAI已经率先拔得头筹&…

硬刚ChatGPT!文心一言能否为百度止颓?

引言: 近年来,人工智能领域的发展突飞猛进,尤其是在自然语言处理(NLP)方面。OpenAI的ChatGPT无疑是这个领域的佼佼者[1]。那么,面对这样一款高度智能的AI模型,国内市场上是否有相应的产品能与之…

openAI之ChatGPT与百度的文言一心比较分析(以ChatGPT口吻的自述)

引言 话说最近百度出了一个叫做“文言一心”的AI写作工具,被很多人吐槽成了“古文机”,因为它能够将现代汉语转化为文言文。而在这个时候,我作为一个最厉害的 AI之---大规模语言模型,感到有必要跟文言一心切磋一下。 首先&#x…

在ONLYOFFICE中如何借助 chatGPT编写一篇属于自己的推广软文

前言; OpenAI chatGPT如何在上线短短几个月的时间内火爆全球的,因为他不仅仅是一个在线聊天工具,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等,是个非常有趣并且很受用户欢迎的软件,但是还没有…

谷歌怕了!ChatGPT狂砸搜索引擎饭碗,CEO开会拉响「红色警报」

来源:新智元 这个月,OpenAI的ChatGPT横空出世,立刻在AI圈掀起一股大风暴。 清晰、智能、循循善诱,甚至能包办论文和代码。当时许多人就预言:谷歌恐怕药丸。 这不是空口虚言,现在,谷歌是真的怕了…

谷歌最高优先级项目曝光:下一代AI搜索,誓要打败ChatGPT

为了应战,「无为而治」多年的谷歌创始人回来抓起了大方向。 岁末年初,科技公司似乎集体进入了反思阶段。过去一个月里,谷歌创始人拉里・佩奇、谢尔盖・布林与公司高管一直在开会,讨论新型 AI 聊天机器人。 自 11 月 30 日 OpenAI …

Gmail之父发声:有了ChatGPT,搜索引擎活不过两年了...

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>CV微信技术交流群 转载自:新智元 | 编辑:David 【导读】Gmail创始人表示:再有两年时间,ChatGPT将彻底摧毁谷歌赖以生存的搜索引…

AI降临,前端启用面壁计划

开篇: “在我们有生之年,你觉得会看到AI兵临城下的那一天吗?就像电影黑客帝国里面演的一样”,Barry从红色的烟盒里取出一根烟发问道。 “不可能!我觉得AI再强,那也是人类发明的,电影过分魔幻化…