首页 / PYTHON / python之游戏开发-坦克大战
python之游戏开发-坦克大战
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python之游戏开发-坦克大战,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7911字,纯文字阅读大概需要12分钟。
内容图文
新增功能:
优化:1.如果子弹碰到墙壁,让子弹消失
2.最多可以发射3颗子弹,不能一直发射
1 # 导入pygame模块 2 import pygame,time,random 3 SCREEN_WIDTH=700 4 SCREEN_HEIGHT=500 5 BG_COLOR=pygame.Color(0,0,0) 6 TEXT_COLOR=pygame.Color(255,0,0) 7class MainGame(): 8 window=None 9 my_tank=None 10#存储敌方坦克的列表 11 enemyTankList=[] 12#定义敌方坦克的数量 13 enemyTankCount=5 14#存储我方子弹的列表 15 myBulletList=[] 16def__init__(self): 17pass 18#开始游戏 19def startGame(self): 20#加载主窗口 21#初始化窗口 22 pygame.display.init() 23#设置窗口的大小及显示 24 MainGame.window=pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT]) 25#初始化我方坦克 26 MainGame.my_tank=Tank(350,250) 27#初始化敌方坦克,并将敌方坦克添加到列表中 28 self.createEnemyTank() 29#设置窗口的标题 30 pygame.display.set_caption(‘坦克大战1.03‘) 31while True: 32#使用坦克移动的速度慢一点 33 time.sleep(0.02) 34#给窗口设置填充色 35 MainGame.window.fill(BG_COLOR) 36#获取事件 37 self.getEvent() 38#绘制文字 39 MainGame.window.blit(self.getTextSuface(‘敌方坦克剩余数量%d‘%len(MainGame.enemyTankList)),(10,10)) 40#调用坦克显示的方法 41 MainGame.my_tank.displayTank() 42#循环遍历敌方坦克列表,展示敌方坦克 43 self.blitEnemyTank() 44#循环遍历显示我方坦克的子弹 45 self.blitMyBullet() 46#调用移动方法 47#如果坦克的开关是开启,才可以移动 48ifnot MainGame.my_tank.stop: 49 MainGame.my_tank.move() 50 pygame.display.update() 51# 初始化敌方坦克,并将敌方坦克添加到列表中 52def createEnemyTank(self): 53 top=100 54#循环生成敌方坦克 55for i in range(MainGame.enemyTankCount): 56 left=random.randint(0,600) 57 speed=random.randint(1,4) 58 enemy=EnemyTank(left,top,speed) 59 MainGame.enemyTankList.append(enemy) 60 61# 循环遍历敌方坦克列表,展示敌方坦克 62def blitEnemyTank(self): 63for enemyTank in MainGame.enemyTankList: 64 enemyTank.displayTank() 65 enemyTank.randMove() 66#循环遍历我方子弹存储列表 67def blitMyBullet(self): 68for myBullet in MainGame.myBulletList: 69#判断当前的子弹是否是活着状态,如果是则进行显示及移动, 70if myBullet.live: 71 myBullet.displayBullet() 72# 调用子弹的移动方法 73 myBullet.move() 74# 否则在列表中删除 75else: 76 MainGame.myBulletList.remove(myBullet) 77 78 79 80 81#结束游戏 82def endGame(self): 83print(‘谢谢使用,欢迎再次使用‘) 84 exit() 85#左上角文字的绘制 86def getTextSuface(self,text): 87#初始化字体模块 88 pygame.font.init() 89#查看所有的字体名称 90# print(pygame.font.get_fonts()) 91#获取字体Font对象 92 font=pygame.font.SysFont(‘kaiti‘,18) 93#绘制文字信息 94 textSurface=font.render(text,True,TEXT_COLOR) 95return textSurface 96#获取事件 97def getEvent(self): 98#获取所有事件 99 eventList= pygame.event.get() 100#遍历事件101for event in eventList: 102#判断按下的键是关闭还是键盘按下103#如果按的是退出,关闭窗口104if event.type == pygame.QUIT: 105 self.endGame() 106#如果是键盘的按下107if event.type == pygame.KEYDOWN: 108#判断按下的是上、下、左、右109if event.key == pygame.K_LEFT: 110#切换方向111 MainGame.my_tank.direction=‘L‘112#修改坦克的开关状态113 MainGame.my_tank.stop=False 114# MainGame.my_tank.move()115print(‘按下左键,坦克向左移动‘) 116elif event.key == pygame.K_RIGHT: 117#切换方向118 MainGame.my_tank.direction=‘R‘119#修改坦克的开关状态120 MainGame.my_tank.stop=False 121# MainGame.my_tank.move()122print(‘按下右键,坦克向右移动‘) 123elif event.key == pygame.K_UP: 124#切换方向125 MainGame.my_tank.direction=‘U‘126#修改坦克的开关状态127 MainGame.my_tank.stop=False 128# MainGame.my_tank.move()129print(‘按下上键,坦克向上移动‘) 130elif event.key == pygame.K_DOWN: 131#切换方向132 MainGame.my_tank.direction=‘D‘133#修改坦克的开关状态134 MainGame.my_tank.stop=False 135# MainGame.my_tank.move()136print(‘按下左键,坦克向下移动‘) 137elif event.key == pygame.K_SPACE: 138print(‘发射子弹‘) 139#如果当前我方子弹列表的大小 小于等于3时候才可以创建140if len(MainGame.myBulletList)<3: 141# 创建我方坦克发射的子弹142 myBullet = Bullet(MainGame.my_tank) 143 MainGame.myBulletList.append(myBullet) 144145146147#松开方向键,坦克停止移动,修改坦克的开关状态148if event.type == pygame.KEYUP: 149#判断松开的键是上、下、左、右时候才停止坦克移动150if event.key==pygame.K_UP or event.key==pygame.K_DOWN or event.key == pygame.K_LEFT or event.key ==pygame.K_RIGHT: 151 MainGame.my_tank.stop = True 152153154class Tank(): 155#添加距离左边left 距离上边top156def__init__(self,left,top): 157#保存加载的图片158 self.images={ 159‘U‘:pygame.image.load(‘img/p1tankU.gif‘), 160‘D‘:pygame.image.load(‘img/p1tankD.gif‘), 161‘L‘:pygame.image.load(‘img/p1tankL.gif‘), 162‘R‘:pygame.image.load(‘img/p1tankR.gif‘), 163 } 164#方向165 self.direction=‘L‘166#根据当前图片的方向获取图片 surface167 self.image=self.images[self.direction] 168#根据图片获取区域169 self.rect=self.image.get_rect() 170#设置区域的left 和top171 self.rect.left=left 172 self.rect.top=top 173#速度 决定移动的快慢174 self.speed=5 175#坦克移动的开关176 self.stop=True 177178#移动179def move(self): 180#判断坦克的方向进行移动181if self.direction == ‘L‘: 182if self.rect.left>0: 183 self.rect.left -= self.speed 184elif self.direction == ‘U‘: 185if self.rect.top>0: 186 self.rect.top -= self.speed 187elif self.direction == ‘D‘: 188if self.rect.top+self.rect.height<SCREEN_HEIGHT: 189 self.rect.top += self.speed 190elif self.direction == ‘R‘: 191if self.rect.left+self.rect.height<SCREEN_WIDTH: 192 self.rect.left += self.speed 193194#射击195def shot(self): 196pass197#展示坦克的方法198def displayTank(self): 199#获取展示的对象200 self.image=self.images[self.direction] 201#调用blit方法展示202 MainGame.window.blit(self.image,self.rect) 203#我方坦克204class MyTank(Tank): 205def__init__(self): 206pass207208#敌方坦克209class EnemyTank(Tank): 210def__init__(self,left,top,speed): 211#加载图片集212 self.images={ 213‘U‘:pygame.image.load(‘img/enemy1U.gif‘), 214‘D‘:pygame.image.load(‘img/enemy1D.gif‘), 215‘L‘:pygame.image.load(‘img/enemy1L.gif‘), 216‘R‘:pygame.image.load(‘img/enemy1R.gif‘) 217 } 218#方向,随机生成敌方坦克的方向219 self.direction=self.randDirection() 220#根据方向获取图片221 self.image=self.images[self.direction] 222#区域223 self.rect=self.image.get_rect() 224#对left和top进行赋值225 self.rect.left=left 226 self.rect.top=top 227#速度228 self.speed=speed 229#移动开关键230 self.flag=True 231#薪增加一个步数变量 step232 self.step=60 233234235# 随机生成敌方坦克的方向236def randDirection(self): 237 num=random.randint(1,4) 238if num == 1: 239return‘U‘240elif num == 2: 241return‘D‘242elif num == 3: 243return"L"244elif num == 4: 245return‘R‘246247#敌方坦克随机移动的方法248def randMove(self): 249if self.step<=0: 250#修改方向251 self.direction=self.randDirection() 252#让步数复位253 self.step=60 254else: 255 self.move() 256#让步数递减257 self.step-=1 258#子弹类259class Bullet(): 260def__init__(self,tank): 261#加载图片262 self.image=pygame.image.load(‘img/enemymissile.gif‘) 263#坦克的方向决定子弹的方向264 self.direction=tank.direction 265#获取区域266 self.rect=self.image.get_rect() 267#子弹的left和top与方向有关268if self.direction == ‘U‘: 269 self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2 270 self.rect.top = tank.rect.top - self.rect.height 271elif self.direction == ‘D‘: 272 self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2 273 self.rect.top = tank.rect.top + tank.rect.height 274elif self.direction == ‘L‘: 275 self.rect.left = tank.rect.left - self.rect.width / 2 - self.rect.width / 2 276 self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2 277elif self.direction == ‘R‘: 278 self.rect.left = tank.rect.left + tank.rect.width 279 self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2 280#子弹的速度281 self.speed=6 282#子弹的状态,是否碰到墙壁,如果碰到墙壁,修改此状态283 self.live=True 284#移动285def move(self): 286if self.direction == ‘U‘: 287if self.rect.top>0: 288 self.rect.top-=self.speed 289else: 290#修改子弹的状态291 self.live=False 292elif self.direction == ‘R‘: 293if self.rect.left+self.rect.width<SCREEN_WIDTH: 294 self.rect.left+=self.speed 295else: 296#修改子弹的状态297 self.live=False 298elif self.direction ==‘D‘: 299if self.rect.top+self.rect.height<SCREEN_HEIGHT: 300 self.rect.top+=self.speed 301else: 302#修改子弹的状态303 self.live=False 304elif self.direction == ‘L‘: 305if self.rect.left>0: 306 self.rect.left-=self.speed 307else: 308#修改子弹的状态309 self.live=False 310#展示子弹的方法311def displayBullet(self): 312#将图片surface加载到窗口313 MainGame.window.blit(self.image,self.rect) 314class Wall(): 315def__init__(self): 316pass317#展示墙壁的方法318def displayWall(self): 319pass320class Explode(): 321def__init__(self): 322pass323#展示爆炸效果的方法324def displayExplode(self): 325pass326class Music(): 327def__init__(self): 328pass329#播放音乐330def play(self): 331pass332if__name__==‘__main__‘: 333 MainGame().startGame() 334# MainGame().getTextSuface()
原文:https://www.cnblogs.com/Lynn123/p/11824480.html
内容总结
以上是互联网集市为您收集整理的python之游戏开发-坦克大战全部内容,希望文章能够帮你解决python之游戏开发-坦克大战所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】