坦克大战游戏编程实现

合集下载

python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)

python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)

python+pygame实现坦克⼤战⼩游戏的⽰例代码(可以⾃定义⼦弹速度)python+pygame实现坦克⼤战⼩游戏—可以⾃定义⼦弹速度:运⾏环境–python3.7、pycharm;源码需要请:点赞留⾔邮箱;正常版⼦弹速度:普通速度版加速版⼦弹速度:⼦弹加速版另外还有多种道具,⽀持两⼈⼀起玩。

main()⽅法如下:def main():pygame.init()pygame.mixer.init()resolution = 630, 630screen = pygame.display.set_mode(resolution)pygame.display.set_caption("Tank Game ")# 加载图⽚,⾳乐,⾳效.background_image = pygame.image.load(r"..\image\background.png")home_image = pygame.image.load(r"..\image\home.png")home_destroyed_image = pygame.image.load(r"..\image\home_destroyed.png")bang_sound = pygame.mixer.Sound(r"..\music\bang.wav")bang_sound.set_volume(1)fire_sound = pygame.mixer.Sound(r"..\music\Gunfire.wav")start_sound = pygame.mixer.Sound(r"..\music\start.wav")start_sound.play()# 定义精灵组:坦克,我⽅坦克,敌⽅坦克,敌⽅⼦弹allTankGroup = pygame.sprite.Group()mytankGroup = pygame.sprite.Group()allEnemyGroup = pygame.sprite.Group()redEnemyGroup = pygame.sprite.Group()greenEnemyGroup = pygame.sprite.Group()otherEnemyGroup = pygame.sprite.Group()enemyBulletGroup = pygame.sprite.Group()# 创建地图bgMap = wall.Map()# 创建⾷物/道具但不显⽰prop = food.Food()# 创建我⽅坦克myTank_T1 = myTank.MyTank(1)allTankGroup.add(myTank_T1)mytankGroup.add(myTank_T1)myTank_T2 = myTank.MyTank(2)allTankGroup.add(myTank_T2)mytankGroup.add(myTank_T2)# 创建敌⽅坦克for i in range(1, 4):enemy = enemyTank.EnemyTank(i)allTankGroup.add(enemy)allEnemyGroup.add(enemy)if enemy.isred == True:redEnemyGroup.add(enemy)continueif enemy.kind == 3:greenEnemyGroup.add(enemy)continueotherEnemyGroup.add(enemy)# 敌军坦克出现动画appearance_image = pygame.image.load(r"..\image\appear.png").convert_alpha()appearance = []appearance.append(appearance_image.subsurface(( 0, 0), (48, 48)))appearance.append(appearance_image.subsurface((48, 0), (48, 48)))appearance.append(appearance_image.subsurface((96, 0), (48, 48)))# ⾃定义事件# 创建敌⽅坦克延迟200DELAYEVENT = EREVENTpygame.time.set_timer(DELAYEVENT, 200)# 创建敌⽅⼦弹延迟1000ENEMYBULLETNOTCOOLINGEVENT = EREVENT + 1 pygame.time.set_timer(ENEMYBULLETNOTCOOLINGEVENT, 1000)# 创建我⽅⼦弹延迟200MYBULLETNOTCOOLINGEVENT = EREVENT + 2pygame.time.set_timer(MYBULLETNOTCOOLINGEVENT, 200)# 敌⽅坦克静⽌8000NOTMOVEEVENT = EREVENT + 3pygame.time.set_timer(NOTMOVEEVENT, 8000)delay = 100moving = 0movdir = 0moving2 = 0movdir2 = 0enemyNumber = 3enemyCouldMove = Trueswitch_R1_R2_image = TruehomeSurvive = Truerunning_T1 = Truerunning_T2 = Trueclock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# 我⽅⼦弹冷却事件if event.type == MYBULLETNOTCOOLINGEVENT:myTank_T1.bulletNotCooling = True# 敌⽅⼦弹冷却事件if event.type == ENEMYBULLETNOTCOOLINGEVENT:for each in allEnemyGroup:each.bulletNotCooling = True# 敌⽅坦克静⽌事件if event.type == NOTMOVEEVENT:enemyCouldMove = True# 创建敌⽅坦克延迟if event.type == DELAYEVENT:if enemyNumber < 4:enemy = enemyTank.EnemyTank()if pygame.sprite.spritecollide(enemy, allTankGroup, False, None):breakallEnemyGroup.add(enemy)allTankGroup.add(enemy)enemyNumber += 1if enemy.isred == True:redEnemyGroup.add(enemy)elif enemy.kind == 3:greenEnemyGroup.add(enemy)else:otherEnemyGroup.add(enemy)if event.type == pygame.KEYDOWN:if event.key == pygame.K_c and pygame.KMOD_CTRL:pygame.quit()sys.exit()if event.key == pygame.K_e:myTank_T1.levelUp()if event.key == pygame.K_q:myTank_T1.levelDown()if event.key == pygame.K_3:myTank_T1.levelUp()myTank_T1.levelUp()myTank_T1.level = 3if event.key == pygame.K_2:if myTank_T1.speed == 3:myTank_T1.speed = 24else:myTank_T1.speed = 3if event.key == pygame.K_1:for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]: bgMap.brick = wall.Brick()bgMap.brick.rect.left, bgMap.brick.rect.top = 3 + x * 24, 3 + y * 24bgMap.brickGroup.add(bgMap.brick)if event.key == pygame.K_4:for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:bgMap.iron = wall.Iron()bgMap.iron.rect.left, bgMap.iron.rect.top = 3 + x * 24, 3 + y * 24bgMap.ironGroup.add(bgMap.iron)# 检查⽤户的键盘操作key_pressed = pygame.key.get_pressed()# 玩家⼀的移动操作if moving:moving -= 1if movdir == 0:allTankGroup.remove(myTank_T1)if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif movdir == 1:allTankGroup.remove(myTank_T1)if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif movdir == 2:allTankGroup.remove(myTank_T1)if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif movdir == 3:allTankGroup.remove(myTank_T1)if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif not moving:if key_pressed[pygame.K_w]:moving = 7movdir = 0running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving = 0allTankGroup.add(myTank_T1)elif key_pressed[pygame.K_s]:moving = 7movdir = 1running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving = 0allTankGroup.add(myTank_T1)elif key_pressed[pygame.K_a]:moving = 7movdir = 2running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving = 0allTankGroup.add(myTank_T1)elif key_pressed[pygame.K_d]:moving = 7movdir = 3running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup): moving = 0allTankGroup.add(myTank_T1)if key_pressed[pygame.K_j]:if not myTank_T1.bullet.life and myTank_T1.bulletNotCooling:fire_sound.play()myTank_T1.shoot()myTank_T1.bulletNotCooling = False# 玩家⼆的移动操作if moving2:moving2 -= 1if movdir2 == 0:allTankGroup.remove(myTank_T2)myTank_T2.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)running_T2 = Trueif movdir2 == 1:allTankGroup.remove(myTank_T2)myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)running_T2 = Trueif movdir2 == 2:allTankGroup.remove(myTank_T2)myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)running_T2 = Trueif movdir2 == 3:allTankGroup.remove(myTank_T2)myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)running_T2 = Trueif not moving2:if key_pressed[pygame.K_UP]:allTankGroup.remove(myTank_T2)myTank_T2.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 0running_T2 = Trueelif key_pressed[pygame.K_DOWN]:allTankGroup.remove(myTank_T2)myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 1running_T2 = Trueelif key_pressed[pygame.K_LEFT]:allTankGroup.remove(myTank_T2)myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 2running_T2 = Trueelif key_pressed[pygame.K_RIGHT]:allTankGroup.remove(myTank_T2)myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup) allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 3running_T2 = Trueif key_pressed[pygame.K_KP0]:if not myTank_T2.bullet.life:# fire_sound.play()myTank_T2.shoot()# 画背景screen.blit(background_image, (0, 0))# 画砖块for each in bgMap.brickGroup:screen.blit(each.image, each.rect)# 花⽯头for each in bgMap.ironGroup:screen.blit(each.image, each.rect)# 画homeif homeSurvive:screen.blit(home_image, (3 + 12 * 24, 3 + 24 * 24))else:screen.blit(home_destroyed_image, (3 + 12 * 24, 3 + 24 * 24))# 画我⽅坦克1if not (delay % 5):switch_R1_R2_image = not switch_R1_R2_imageif switch_R1_R2_image and running_T1:screen.blit(myTank_T1.tank_R0, (myTank_T1.rect.left, myTank_T1.rect.top)) running_T1 = Falseelse:screen.blit(myTank_T1.tank_R1, (myTank_T1.rect.left, myTank_T1.rect.top)) # 画我⽅坦克2if switch_R1_R2_image and running_T2:screen.blit(myTank_T2.tank_R0, (myTank_T2.rect.left, myTank_T2.rect.top))running_T2 = Falseelse:screen.blit(myTank_T2.tank_R1, (myTank_T2.rect.left, myTank_T2.rect.top))# 画敌⽅坦克for each in allEnemyGroup:# 判断5⽑钱特效是否播放if each.flash:# 判断画左动作还是右动作if switch_R1_R2_image:screen.blit(each.tank_R0, (each.rect.left, each.rect.top))if enemyCouldMove:allTankGroup.remove(each)each.move(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(each)else:screen.blit(each.tank_R1, (each.rect.left, each.rect.top))if enemyCouldMove:allTankGroup.remove(each)each.move(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(each)else:# 播放5⽑钱特效if each.times > 0:each.times -= 1if each.times <= 10:screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))elif each.times <= 20:screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))elif each.times <= 30:screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))elif each.times <= 40:screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))elif each.times <= 50:screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))elif each.times <= 60:screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))elif each.times <= 70:screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))elif each.times <= 80:screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))elif each.times <= 90:screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))if each.times == 0:each.flash = True# 绘制我⽅⼦弹1if myTank_T1.bullet.life:myTank_T1.bullet.move()screen.blit(myTank_T1.bullet.bullet, myTank_T1.bullet.rect)# ⼦弹碰撞⼦弹for each in enemyBulletGroup:if each.life:if pygame.sprite.collide_rect(myTank_T1.bullet, each):myTank_T1.bullet.life = Falseeach.life = Falsepygame.sprite.spritecollide(myTank_T1.bullet, enemyBulletGroup, True, None) # ⼦弹碰撞敌⽅坦克if pygame.sprite.spritecollide(myTank_T1.bullet, redEnemyGroup, True, None):prop.change()bang_sound.play()enemyNumber -= 1myTank_T1.bullet.life = Falseelif pygame.sprite.spritecollide(myTank_T1.bullet,greenEnemyGroup, False, None): for each in greenEnemyGroup:if pygame.sprite.collide_rect(myTank_T1.bullet, each):if each.life == 1:pygame.sprite.spritecollide(myTank_T1.bullet,greenEnemyGroup, True, None) bang_sound.play()enemyNumber -= 1elif each.life == 2:each.life -= 1each.tank = each.enemy_3_0elif each.life == 3:each.life -= 1each.tank = each.enemy_3_2myTank_T1.bullet.life = Falseelif pygame.sprite.spritecollide(myTank_T1.bullet, otherEnemyGroup, True, None): bang_sound.play()enemyNumber -= 1myTank_T1.bullet.life = False#if pygame.sprite.spritecollide(myTank_T1.bullet, allEnemyGroup, True, None):# bang_sound.play()# enemyNumber -= 1# myTank_T1.bullet.life = False# ⼦弹碰撞 brickGroupif pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.brickGroup, True, None):myTank_T1.bullet.life = FalsemyTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24 # ⼦弹碰撞 brickGroupif myTank_T1.bullet.strong:if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.ironGroup, True, None):myTank_T1.bullet.life = FalsemyTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24 else:if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.ironGroup, False, None): myTank_T1.bullet.life = FalsemyTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24 # 绘制我⽅⼦弹2if myTank_T2.bullet.life:myTank_T2.bullet.move()screen.blit(myTank_T2.bullet.bullet, myTank_T2.bullet.rect)# ⼦弹碰撞敌⽅坦克if pygame.sprite.spritecollide(myTank_T2.bullet, allEnemyGroup, True, None):bang_sound.play()enemyNumber -= 1myTank_T2.bullet.life = False# ⼦弹碰撞 brickGroupif pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.brickGroup, True, None):myTank_T2.bullet.life = FalsemyTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24 # ⼦弹碰撞 brickGroupif myTank_T2.bullet.strong:if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.ironGroup, True, None):myTank_T2.bullet.life = FalsemyTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24 else:if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.ironGroup, False, None): myTank_T2.bullet.life = FalsemyTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24 # 绘制敌⼈⼦弹for each in allEnemyGroup:# 如果⼦弹没有⽣命,则赋予⼦弹⽣命if not each.bullet.life and each.bulletNotCooling and enemyCouldMove:enemyBulletGroup.remove(each.bullet)each.shoot()enemyBulletGroup.add(each.bullet)each.bulletNotCooling = False# 如果5⽑钱特效播放完毕并且⼦弹存活则绘制敌⽅⼦弹if each.flash:if each.bullet.life:# 如果敌⼈可以移动if enemyCouldMove:each.bullet.move()screen.blit(each.bullet.bullet, each.bullet.rect)# ⼦弹碰撞我⽅坦克if pygame.sprite.collide_rect(each.bullet, myTank_T1):bang_sound.play()myTank_T1.rect.left, myTank_T1.rect.top = 3 + 8 * 24, 3 + 24 * 24each.bullet.life = Falsemoving = 0 # 重置移动控制参数for i in range(myTank_T1.level+1):myTank_T1.levelDown()if pygame.sprite.collide_rect(each.bullet, myTank_T2):bang_sound.play()myTank_T2.rect.left, myTank_T2.rect.top = 3 + 16 * 24, 3 + 24 * 24each.bullet.life = False# ⼦弹碰撞 brickGroupif pygame.sprite.spritecollide(each.bullet, bgMap.brickGroup, True, None):each.bullet.life = False# ⼦弹碰撞 ironGroupif each.bullet.strong:if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, True, None):each.bullet.life = Falseelse:if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, False, None):each.bullet.life = False# 最后画⾷物/道具if prop.life:screen.blit(prop.image, prop.rect)# 我⽅坦克碰撞⾷物/道具if pygame.sprite.collide_rect(myTank_T1, prop):if prop.kind == 1: # 敌⼈全毁for each in allEnemyGroup:if pygame.sprite.spritecollide(each, allEnemyGroup, True, None):bang_sound.play()enemyNumber -= 1prop.life = Falseif prop.kind == 2: # 敌⼈静⽌enemyCouldMove = Falseprop.life = Falseif prop.kind == 3: # ⼦弹增强myTank_T1.bullet.strong = Trueprop.life = Falseif prop.kind == 4: # 家得到保护for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:bgMap.iron = wall.Iron()bgMap.iron.rect.left, bgMap.iron.rect.top = 3 + x * 24, 3 + y * 24bgMap.ironGroup.add(bgMap.iron)prop.life = Falseif prop.kind == 5: # 坦克⽆敌prop.life = Falsepassif prop.kind == 6: # 坦克升级myTank_T1.levelUp()prop.life = Falseif prop.kind == 7: # 坦克⽣命+1myTank_T1.life += 1prop.life = False# 延迟delay -= 1if not delay:delay = 100pygame.display.flip()clock.tick(60)总结到此这篇关于python+pygame实现坦克⼤战⼩游戏---可以⾃定义⼦弹速度的⽂章就介绍到这了,更多相关python+pygame实现坦克⼤战⼩游戏内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

Java综合编程——坦克大战(15.1.5)

Java综合编程——坦克大战(15.1.5)

子弹类中的run()方法中
ActionEvent e
实现事件监听三步:
1. 2. 3.
确定事件源 确定监听类 监听对象的注册
举例——练习1

1. 2.tton,当该 按钮被按下后,系统给出提示 事件源JButton对象 监听器:
单独创建一个类负责监听 让JFrame负责监听
3.
把监听器加入到事件源中(注册监听) *事件对象,系统自动产生

坦克有方向, 画出所有方向的坦克
3、形成Tank类的子类


敌人坦克(EnemyTank)和我方坦克 (MyTank) 在这两个方法中覆盖父类的构造方法 将敌人坦克的颜色设置成蓝色 我方坦克设置成红色
4、


在MyPanel中绘制出一辆我方坦克,方向 向上 绘制出五辆敌人坦克,方向向下
在paint方法中用System.out.println(“调用 paint");



画直线:g.drawLine(10, 10, 40, 40); 画矩形边框:g.drawRect(60, 60, 100, 200); 画填充矩形:g.fill3DRect(50, 50, 30, 30, true); 设置颜色:g.setColor(Color.red);
基础知识
1. 2.
图形用户界面 Java绘图技术
1、图形用户界面

创建一个用户界面JFrame,取名为MainFrame 在其上添加一个JPanel,显示一个圆。
编程思路

(构建坦克大战主窗口)

坦克大战的主窗口是由一个JFrame构成的,因 为需要在上面作图,但是JFrame没有这个功能, 所以我们要在JFrame上再加上一个JPanel,在 JPanel上绘图。 我们在这里没有直接用JFrame和JPanel类,而 是定义另外两个类MainFrame和MainPanel,这 个两个类分别继承了JFrame和JPanel,然后再 由这两个类分别生成对象mf和mp,我们要在mp 对象上作图

python实现简单坦克大战

python实现简单坦克大战

python实现简单坦克⼤战基于对⾯向对象编程的思想完成简单的坦克⼤战游戏。

主要⽬的锻炼⾯相对象编程思想同样的在使⽤python进⾏游戏编写时需要安装pygame模块安装⽅法:pycharm安装⽅式:File --> setting游戏中的主要对象有:坦克⽗类:BaseTank我⽅坦克:HeroTank敌⽅坦克:EnemyTank⼦弹类:Bullet爆炸类:Explode墙类:Wall主进程:MainGame定义⼀个精灵类:# 定义⼀个精灵类class BaseItem(Sprite):def __init__(self, color, width, height):# Call the parent class (Sprite) constructorpygame.sprite.Sprite.__init__(self)坦克⽗类:# 定义类属性,所有坦克对象⾼和宽都是⼀样width = 60height = 60def __init__(self, left, top):self.direction = 'U' # 坦克的⽅向默认向上# 存放图⽚的字典self.images = {'U': pygame.image.load('tank_img/p1tankU.gif'),'D': pygame.image.load('tank_img/p1tankD.gif'),'L': pygame.image.load('tank_img/p1tankL.gif'),'R': pygame.image.load('tank_img/p1tankR.gif')}self.image = self.images[self.direction] # 坦克的图⽚由⽅向决定 self.speed = 5 # 坦克的速度self.rect = self.image.get_rect()# 设置放置的位置self.rect.left = leftself.rect.top = topself.stop = True # 坦克是否停⽌self.live = True # 决定坦克是否消灭了# 保持原来的位置self.oldLeft = self.rect.leftself.oldTop = self.rect.top# 射击⽅法def shot(self):return Bullet(self)# 坦克的移动def move(self):# 保持原来的状态self.oldLeft = self.rect.leftself.oldTop = self.rect.top# 判断坦克的移动⽅向if self.direction == 'U':if self.rect.top > 0:self.rect.top -= self.speedelif self.direction == 'D':if self.rect.top + self.rect.height < WINDOW_HEIGHT:self.rect.top += self.speedelif self.direction == 'L':if self.rect.left > 0:self.rect.left -= self.speedelif self.direction == 'R':if self.rect.left+self.rect.height < WINDOW_WIDTH:self.rect.left += self.speed# 加载坦克def displayTank(self):self.image = self.images[self.direction]MainGame.window.blit(self.image, self.rect)# 撞墙处理def hitWall(self):for wall in MainGame.wallList:if pygame.sprite.collide_rect(wall, self):self.stay()# 处理位置不变def stay(self):self.rect.left = self.oldLeftself.rect.top = self.oldTop我⽅坦克类():# 我⽅坦克class HeroTank(BaseTank):def __init__(self, left, top):super().__init__(left, top)# 我⽅坦克碰撞敌⽅坦克def myTank_hit_enemyTank(self):for enemyTank in MainGame.EnemyTankList:if pygame.sprite.collide_rect(enemyTank, self):self.stay()敌⽅坦克类():super(EnemyTank, self).__init__(left, top)self.images = {'U': pygame.image.load('tank_img/enemy1U.gif'),'D': pygame.image.load('tank_img/enemy1D.gif'),'L': pygame.image.load('tank_img/enemy1L.gif'),'R': pygame.image.load('tank_img/enemy1R.gif')}self.direction = self.RandomDirection()self.image = self.images[self.direction]self.rect = self.image.get_rect()self.rect.left = leftself.rect.top = topself.speed = speedself.step = 60self.enemy_flag = False# 坦克出⽣随机⽅向def RandomDirection(self):num = random.randint(1, 4)if num == 1:return 'U'elif num == 2:return 'D'elif num == 3:return 'L'else:return 'R'# 坦克随机移动def randomMove(self):if self.step < 0:self.direction = self.RandomDirection()self.step = 60else:self.move()self.step -= 1# 坦克射击def shot(self):num = random.randint(1, 100)if num < 4:return Bullet(self)# 敌⽅坦克碰撞我⽅坦克def enemyTank_hit_MyTank(self):for enemy in MainGame.EnemyTankList:if MainGame.my_tank and MainGame.my_tank.live:if pygame.sprite.collide_rect(MainGame.my_tank, enemy):self.stay()⼦弹类():# ⼦弹类class Bullet(BaseItem):def __init__(self, tank):self.image = pygame.image.load('tank_img/tankmissile.gif')self.direction = tank.directionself.rect = self.image.get_rect()# 根据坦克⽅向,⽣成⼦弹位置if self.direction == 'U':self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2 self.rect.top = tank.rect.top - self.rect.heightelif self.direction == 'D':self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2 self.rect.top = tank.rect.top + tank.rect.heightelif self.direction == 'L':self.rect.left = tank.rect.left - self.rect.width / 2 - self.rect.width / 2 self.rect.top = tank.rect.top + tank.rect.height / 2 - self.rect.width / 2 elif self.direction == 'R':self.rect.left = tank.rect.left + tank.rect.widthself.rect.top = tank.rect.top + tank.rect.height / 2 - self.rect.width / 2 # ⼦弹的速度self.speed = 6# ⼦弹状态self.live = True# 加载⼦弹def displayBullet(self):def move(self):if self.direction == 'U':if self.rect.top > 0:self.rect.top -= self.speedelse:self.live = Falseelif self.direction == 'R':if self.rect.left + self.rect.width < WINDOW_WIDTH:self.rect.left += self.speedelse:self.live = Falseelif self.direction == 'D':if self.rect.top + self.rect.height < WINDOW_HEIGHT: self.rect.top += self.speedelse:self.live = Falseelif self.direction == 'L':if self.rect.left > 0:self.rect.left -= self.speedelse:self.live = False# 我⽅⼦弹击中敌⽅坦克def myBullet_hit_enemy(self):for enemytank in MainGame.EnemyTankList:if pygame.sprite.collide_rect(enemytank, self):enemytank.live = Falseself.live = False# 创建爆炸对象explode = Explode(enemytank)MainGame.explodeList.append(explode)# 敌⽅坦克击中我⽅坦克def enemyBullet_hit_myTank(self):if MainGame.my_tank and MainGame.my_tank.live:if pygame.sprite.collide_rect(MainGame.my_tank, self): MainGame.my_tank.live = Falseself.live = False# 创建爆炸对象explode = Explode(MainGame.my_tank)MainGame.explodeList.append(explode)# 射击墙壁def wall_bullet(self):for wall in MainGame.wallList:if pygame.sprite.collide_rect(wall, self):wall.hg -= 1self.live = Falseif wall.hg <= 0:wall.live = False墙壁类():# 墙壁类class Wall:def __init__(self, left, top):self.image = pygame.image.load('tank_img/steels.gif') self.rect = self.image.get_rect()self.rect.left = leftself.rect.top = topself.live = Trueself.hg = 100000000000000# 加载墙壁def displayWall(self):if self.live:MainGame.window.blit(self.image, self.rect)爆炸类:# 爆炸类class Explode:def __init__(self, tank):# 爆炸的位置由坦克决定self.rect = tank.rectself.images = [pygame.image.load('tank_img/blast0.gif'),pygame.image.load('tank_img/blast1.gif'),pygame.image.load('tank_img/blast5.gif'),pygame.image.load('tank_img/blast6.gif'),pygame.image.load('tank_img/blast7.gif')]self.step = 0self.image = self.images[self.step]self.live = True# 加载爆炸类def displayExplode(self):if self.step < len(self.images):self.image = self.images[self.step]self.step += 1MainGame.window.blit(self.image, self.rect)else:self.live = Falseself.step = 0主进程():# 游戏类class MainGame:# 类属性window = Nonemy_tank = None# 敌⽅坦克初始化EnemyTankList = []EnemyTankCount = 5# 存储我⽅⼦弹列表myBulleList = []# 存储敌⽅⼦弹的列表EnemyBulletList = []# 创建爆炸对象列表explodeList = []# 创建墙壁列表wallList = []# 游戏开始⽅法def start_game(self):# 初始化展⽰模块pygame.display.init()# 调⽤创建窗⼝的⽅法self.creat_window()# 设置游戏窗⼝标题pygame.display.set_caption('坦克⼤战')# 初始化我⽅坦克self.createMyTank()# 初始化敌⽅坦克self.creatEnemyTank()# 初始化墙壁self.creatWall()# 程序持续进⾏while True:# 更改背景颜⾊MainGame.window.fill(COLOR_GREEN)# 背景⾳乐# 获取事件self.getEvent()# 调⽤我⽅坦克进⾏显⽰if MainGame.my_tank and MainGame.my_tank.live: MainGame.my_tank.displayTank()if not MainGame.my_tank.stop:MainGame.my_tank.move()MainGame.my_tank.hitWall()MainGame.my_tank.myTank_hit_enemyTank()else:del MainGame.my_tankMainGame.my_tank = None# 加载我⽅⼦弹self.biltMyBullet()# 显⽰敌⽅坦克self.biltEnemyTank()# 显⽰敌⽅⼦弹self.biltEnemyBullet()# 显⽰墙壁self.blitExplode()self.put_more_enemytank()# 窗⼝持续刷新pygame.display.update()time.sleep(0.02)# 重复添加敌⽅坦克def put_more_enemytank(self):while len(MainGame.EnemyTankList) < 5:self.more()# 创建游戏窗⼝⽅法:def creat_window(self):if not MainGame.window:# 创建窗⼝MainGame.window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))return MainGame.window# 创建我⽅坦克def createMyTank(self):MainGame.my_tank = HeroTank((WINDOW_WIDTH - HeroTank.width)/2, WINDOW_HEIGHT - HeroTank.height) music = Music('tank_img/start.wav')music.play()# 创建墙壁def creatWall(self):for i in range(60, WINDOW_WIDTH, 60):top = WINDOW_WIDTH // 3left = iwall = Wall(left, top)MainGame.wallList.append(wall)# 显⽰墙壁def blitWall(self):for b in MainGame.wallList:if b.live:b.displayWall()else:MainGame.wallList.remove(b)# 加载我⽅⼦弹def biltMyBullet(self):for bullet in MainGame.myBulleList:if bullet.live:bullet.displayBullet()bullet.move()bullet.myBullet_hit_enemy()bullet.wall_bullet()else:MainGame.myBulleList.remove(bullet)# 后续坦克的添加def more(self):top = 0for i in range(5 - len(MainGame.EnemyTankList)):left = random.randint(0, 750)speed = random.randint(1, 4)enemy = EnemyTank(left, top, speed)MainGame.EnemyTankList.append(enemy)# 创建敌⽅坦克def creatEnemyTank(self):top = 0for i in range(MainGame.EnemyTankCount):left = random.randint(0, 750)speed = random.randint(1, 4)enemy = EnemyTank(left, top, speed)MainGame.EnemyTankList.append(enemy)# 循环遍历显⽰敌⽅坦克def biltEnemyTank(self):for enemytank in MainGame.EnemyTankList:if enemytank.live:enemytank.displayTank()EnemyBullet = enemytank.shot()enemytank.randomMove()enemytank.hitWall()enemytank.enemyTank_hit_MyTank()MainGame.EnemyBulletList.append(EnemyBullet)else:MainGame.EnemyTankList.remove(enemytank)MainGame.EnemyTankCount -= 1# 加载敌⽅⼦弹def biltEnemyBullet(self):for bullet in MainGame.EnemyBulletList:if bullet.live:bullet.displayBullet()bullet.move()bullet.enemyBullet_hit_myTank()bullet.wall_bullet()else:MainGame.EnemyBulletList.remove(bullet)# 加载爆炸效果def blitExplode(self):for explode in MainGame.explodeList:if explode.live:explode.displayExplode()else:MainGame.explodeList.remove(explode)# 获取游戏中的所有事件def getEvent(self):# 获取游戏中的事件列表even_list = pygame.event.get()for e in even_list:# 点击窗⼝的叉号实现游戏结束if e.type == pygame.QUIT:sys.exit()# 通过上下左右键控制坦克的移动if e.type == pygame.KEYDOWN:if MainGame.my_tank and MainGame.my_tank.live:if e.key == pygame.K_DOWN or e.key == pygame.K_s:MainGame.my_tank.direction = 'D'MainGame.my_tank.stop = Falseprint("按下向下的键,向下移动")elif e.key == pygame.K_UP or e.key == pygame.K_w:MainGame.my_tank.direction = 'U'MainGame.my_tank.stop = Falseprint("按下向上的键,向上移动")elif e.key == pygame.K_LEFT or e.key == pygame.K_a:MainGame.my_tank.direction = 'L'MainGame.my_tank.stop = Falseprint("按下向左的键,向左移动")elif e.key == pygame.K_RIGHT or e.key == pygame.K_d:MainGame.my_tank.direction = 'R'MainGame.my_tank.stop = Falseprint("按下向右的键,向右移动")elif e.key == pygame.K_SPACE:print('发射⼦弹')# 创建我⽅⼦弹if len(MainGame.myBulleList) < 10:mybullet = Bullet(MainGame.my_tank)MainGame.myBulleList.append(mybullet)# 射击⾳效Shot_music = Music('tank_img/fire.wav')Shot_music.play()elif e.type == pygame.KEYUP:if e.key == pygame.K_UP or e.key == pygame.K_DOWN or e.key == pygame.K_LEFT or e.key == pygame.K_RIGHT \ or e.key == pygame.K_w or e.key == pygame.K_s or e.key == pygame.K_a or e.key == pygame.K_d:if MainGame.my_tank and MainGame.my_tank.live:MainGame.my_tank.stop = True程序运⾏结果:源码下载:更多关于python游戏的精彩⽂章请点击查看以下专题:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

C语言完整游戏项目坦克大战详细代码

C语言完整游戏项目坦克大战详细代码

C语⾔完整游戏项⽬坦克⼤战详细代码话不多说我们今天就来创造出属于我们⾃⼰的《坦克⼤战》,GOGOGO直接开始吧这次的源码⽐较详细,我分了好⼏个cpp⽂件,思路更加的清晰,请耐⼼⽤⼼的观看⾸先就是我们载⼊图⽚的函数tupian.cpp# include "tanke.h"障碍物void LaoWang(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32 , 32 , &img, 32 * 5, 0 );}void tileHong(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 0, 0 );return;}void tileLv(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 2, 0 );return;}void tileBai(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 1, 0 );return;}IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 3, 0 ); }//物品void FaZhang(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\fazhang.jpg"));putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 ); }void ShouQiang(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\shouqiang.jpg"));putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 ); }void ShangDian(int *wupinx, int *wupiny){IMAGE img;loadimage(&img,_T("res\\shangdian.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }void YaoShui(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\yaoshui.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void DunPai(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\dunpai.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void XieZi(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\ iezi.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void Boss(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\boss.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }void BigBoss(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\bigboss.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }接下来是初始化的函数waiyuan.cpp# include "tanke.h"{setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "⾃⼰⽣命值:";outtextxy(0, 20, c2);char c3[10] ;sprintf(c3, _T("%.1f"), 100* (60 - *j) / 60.0);outtextxy(90, 20, c3);}void DShengMing(int * d,int *k){setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "敌⼈⽣命值:";outtextxy(0, 0, c2);char c3[10] ;sprintf(c3, _T("%.1f"), 100* (60 - *d) / 60.0);outtextxy(90, 0, c3);char c4[40] = "恭喜~! 现在起⾦币到2200有惊喜!";//胜利 if ( *k >= 8000 ){setcolor(YELLOW);settextstyle(30, 0, ("宋体"));outtextxy(150, 0, c4);}}void Gold(int * gold){setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "⾦币:";outtextxy(0, 40, c2);char c3[10] ;sprintf(c3, _T("%d"), *gold);outtextxy(40, 40, c3);}void start(void){initgraph(200, 130);TCHAR s1[10]="坦克⼤战";TCHAR s2[30]="按A 开始游戏按B 退出游戏";TCHAR s3[30]="按W S A D控制⽅向";TCHAR s4[20]="按J 发射⼦弹";TCHAR s5[20]="按C 看攻略";outtextxy(70, 0, s1);outtextxy(0, 110, s2);outtextxy(60, 90, s5);outtextxy(55, 30, s4);outtextxy(35, 60, s3);while (true){Sleep(500);if (GetAsyncKeyState('A')){BeginBatchDraw();closegraph();initgraph(640, 480);Sleep(200);Quit();return ;}if (GetAsyncKeyState('C'))GongLue();}}}void GongLue(void){initgraph(450, 300);TCHAR s1[20]="游戏攻略:";TCHAR s2[50]="再打坦克之前先吃法杖打掉⽩⾊砖块,";TCHAR s3[50]="这样敌坦克打⽩⾊就不能回⾎了,boss更应如此。

JAVA课程设计坦克大战含代码

JAVA课程设计坦克大战含代码

游戏结束判断
生命值耗尽:当坦克的生命值降至0时,游戏结束 游戏时间结束:当游戏时间达到预设值时,游戏结束 胜利条件达成:当一方达到预设的胜利条件时,游戏结束 玩家主动退出:当玩家主动选择退出游戏时,游戏结束
游戏得分计算
得分规则:击毁敌 方坦克、保护己方 坦克、完成特定任 务等
得分方式:根据击 毁敌方坦克的数量、 保护己方坦克的数 量、完成任务的难 度等计算得分
得分显示:在游戏 界面实时显示得分 情况,方便玩家了 解游戏进度
得分记录:游戏结 束后,记录玩家的 分情况,方便玩 家查看历史成绩
游戏优化与扩展
游戏性能优化
优化算法: 使用更高 效的算法, 如动态规 划、贪心 算法等
减少内存 占用:优 化数据结 构,减少 不必要的 内存占用
优化渲染: 使用更高 效的渲染 技术,如 OpenGL、 DirectX 等
优化网络 传输:使 用更高效 的网络传 输协议, 如TCP、 UDP等
优化AI: 使用更高 效的AI算 法,如神 经网络、 遗传算法 等
优化资源 管理:合 理分配系 统资源, 避免资源 浪费
游戏扩展功能实现
增加新的坦克类型:如重型坦克、轻 型坦克等
增加新的地图:如沙漠地图、雪地地 图等
增加新的游戏模式:如团队模式、生 存模式等
音效类型:背景音乐、战斗音效、 胜利音效等
音效处理:音量调节、音效混合、 音效剪辑等
添加标题
添加标题
添加标题
添加标题
音效来源:自行创作、购买版权、 网络下载等
音效与游戏场景的结合:根据游戏 场景选择合适的音效,增强游戏体 验
游戏实体设计
坦克类设计
坦克属性:生命值、攻击 力、防御力、速度等

JAVA实现经典游戏坦克大战的示例代码

JAVA实现经典游戏坦克大战的示例代码

JAVA实现经典游戏坦克⼤战的⽰例代码⽬录前⾔主要设计功能截图代码实现总结前⾔⼩时候⼤家都玩过坦克⼤战吧,熟悉的旋律和丰富的关卡陪伴了我们⼀整个寒暑假,还记得传说中的经典坦克⼤战吗?那些怀旧的记忆,伴随着我们⼀起⾛过来的经典坦克⼤战,刚开始那战战兢兢,屡屡被敌⼈坦克击毁的情景历历在⽬。

现在好了,再也不⽤担⼼敌⼈坦克了,可以横冲直撞,横扫敌⼈坦克了。

快哉《坦克⼤战》游戏以坦克战⽃为主题,⽤java语⾔实现,采⽤了swing技术进⾏了界⾯化处理,设计思路⽤了⾯向对象思想。

主要需求可以⽣成不同的地图,消灭地图上的所有坦克为胜利;可以设置关卡地图,不断增加难度。

主要设计1、要有难度关卡:第⼀关,第⼆关,第三关,第四关,第五关;第⼀关地图最简单,第五关地图最难;2、坦克要有⾎条,打多次才会死3、地图要我有我⽅坦克四辆(相当于4条命)和多辆敌⽅坦克4、我⽅坦克的炮弹数量是固定的,设置为5005、地图右边显⽰基本信息6、地图上要在砖块,铁块,河流功能截图游戏开始页⾯代码实现窗⼝布局public class GameFrame extends JFrame {/*** serialVersionUID*/private static final long serialVersionUID = -1176914786963603304L;public GameFrame() {super();this.setSize(800, 700);this.setTitle("坦克⼤战");this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.setResizable(false);// 显⽰器屏幕⼤⼩Dimension screenSizeInfo = Toolkit.getDefaultToolkit().getScreenSize();int leftTopX = ((int) screenSizeInfo.getWidth() - this.getWidth()) / 2;int leftTopY = ((int) screenSizeInfo.getHeight() - this.getHeight()) / 2;// 设置显⽰的位置在屏幕中间this.setLocation(leftTopX, leftTopY);}}地图渲染核⼼算法@Servicepublic class PaintService {@Autowiredprivate GameContext context;private Brick rightBrick = new Brick(700, 50);private Iron rightIron = new Iron(700, 50);private Water rightWater = new Water(700, 50);/*** 画出东西(包括坦克、障碍物。

JAVA实现坦克大战1.0版本

JAVA实现坦克大战1.0版本

JAVA实现坦克⼤战1.0版本 1package tankGame;2import java.awt.*;3import javax.swing.*;4import java.awt.event.*;5import java.util.*;6/**7 * 功能:我⽅坦克可以发⼦弹8 *9 * */10public class MyTankGame1 extends JFrame {1112public static void main(String[] args) {13// TODO Auto-generated method stub14 MyTankGame1 mtg =new MyTankGame1();15 }16//构造函数17public MyTankGame1(){18 MyPanel mp=new MyPanel();1920//线程启动21 Thread t=new Thread(mp);22 t.start();2324this.add(mp);25this.addKeyListener(mp);//注册监听26this.setSize(400,300);27this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);28this.setVisible(true);29 }3031 }3233//我的⾯板34class MyPanel extends JPanel implements KeyListener,Runnable{35 Hero hero=null;//定义我的坦克36 Vector<Enermy> enermy=new Vector<Enermy>() ;//定义敌⼈的坦克组37int enSize=3;38//构造函数39public MyPanel(){40 hero=new Hero(100,100);4142for(int i=0;i<enSize;i++){43//创建⼀辆敌⼈的坦克对象44 Enermy en=new Enermy((i+1)*50, 0);45 en.setColor(0);46 en.setDerect(3);47//加⼊48 enermy.add(en);49 }5051 }52public void paint(Graphics g){//重新paint53super.paint(g);54 g.fillRect(0, 0, 400, 300);55//画出我的坦克56this.drawTank(hero.getX(), hero.getY(), g,this.hero.derect, 1);57//画出⼦弹58if(hero.s!=null&&hero.s.isLive==true){59 g.fillOval(hero.s.x ,hero.s.y, 2, 2);60 }6162//画出敌⼈的坦克63for(int i=0;i<enermy.size();i++){64this.drawTank(enermy.get(i).getX(), enermy.get(i).getY(), g, enermy.get(i).derect, 0);65//System.out.println(enermy.get(i).derect);//默认值为066 }67 }68public void drawTank(int x,int y,Graphics g,int direct,int type){69//判断是什么类型的坦克,敌⼈的还是我⽅的70switch(type){71case 0:72 g.setColor(Color.CYAN);73break;74case 1:75 g.setColor(Color.yellow);76break;77 }78//判断⽅向79switch(direct){80//坦克头向上81case 0:82//画出我的坦克,到时再封装为⼀个函数 83//画出左边的矩形84 g.fill3DRect(x, y, 5, 30,false);85//画出有右边的矩形86 g.fill3DRect(x+15, y, 5, 30,false);87//画出中间的矩形88 g.fill3DRect(x+5, y+5, 10, 20,false);89//画出圆形90 g.fillOval(x+5, y+10, 10, 10);91//画炮头92 g.drawLine(x+10, y-5, x+10, y+15);93break;9495//坦克头向右96case 1:9798//画出上边的矩形99 g.fill3DRect(x, y, 30, 5,false);100//画出下边的矩形101 g.fill3DRect(x, y+15, 30, 5,false);102//画出中间的矩形103 g.fill3DRect(x+5, y+5, 20, 10,false);104//画出圆形105 g.fillOval(x+10, y+5, 10, 10);106//画炮头107 g.drawLine(x+15, y+10, x+35, y+10); 108break;109110//坦克头向下111case 2:112113 g.fill3DRect(x, y, 5, 30,false);114//画出有右边的矩形115 g.fill3DRect(x+15, y, 5, 30,false);116//画出中间的矩形117 g.fill3DRect(x+5, y+5, 10, 20,false);118//画出圆形119 g.fillOval(x+5, y+10, 10, 10);120//画炮头121 g.drawLine(x+10, y+15,x+10, y+35); 122break;123124//坦克头向左125case 3:126127//画出上边的矩形128 g.fill3DRect(x, y, 30, 5,false);129//画出下边的矩形130 g.fill3DRect(x, y+15, 30, 5,false);131//画出中间的矩形132 g.fill3DRect(x+5, y+5, 20, 10,false);133//画出圆形134 g.fillOval(x+10, y+5, 10, 10);135//画炮头136 g.drawLine( x-5, y+10,x+15, y+10);137break;138 }139140141 }142 @Override143public void keyPressed(KeyEvent e) {144// TODO Auto-generated method stub145if(e.getKeyCode()==KeyEvent.VK_W){146//设置我的坦克⽅向147this.hero.setDerect(0);148this.hero.moveUp();149 }else if (e.getKeyCode()==KeyEvent.VK_D){ 150this.hero.setDerect(1);151this.hero.moveRight();152 }else if (e.getKeyCode()==KeyEvent.VK_S){ 153this.hero.setDerect(2);154this.hero.moveDown();155 }else if (e.getKeyCode()==KeyEvent.VK_A){ 156this.hero.setDerect(3);157this.hero.moveLeft();158 }159this.repaint();160//判断玩家是否按下j161if(e.getKeyCode()==KeyEvent.VK_J){162//开⽕,调⽤shotEnermy163this.hero.shotEnermy();164 }165166 }167 @Override168public void keyReleased(KeyEvent e) { 169// TODO Auto-generated method stub 170171 }172 @Override173public void keyTyped(KeyEvent e) {174// TODO Auto-generated method stub 175176 }177 @Override178public void run() {//实现每隔100ms去重绘179// TODO Auto-generated method stub 180while(true){181try {182 Thread.sleep(100);183 } catch (InterruptedException e) {184// TODO Auto-generated catch block 185 e.printStackTrace();186 }187this.repaint();188 }189 }190 }成员类1package tankGame;2//⼦弹类3class Shot implements Runnable{4int x,y,direct;5int speed=1;6boolean isLive=true;7public Shot(int x,int y,int direct){8this.x=x;9this.y=y;10this.direct=direct;11 }12 @Override13public void run() {14// TODO Auto-generated method stub15while(true){16try {17 Thread.sleep(50);18 } catch (InterruptedException e) {19// TODO Auto-generated catch block20 e.printStackTrace();21 }22switch(direct){23case 0:24 y-=speed;25break;26case 1:27 x+=speed;28break;29case 2:30 y+=speed;31break;32case 3:33 x-=speed;34break;35 }36 System.out.println("X"+x+"Y"+y);37if (x<0||x>400||y<0||y>300){38this.isLive=false;39break;40 }41 }42 }43 }44//坦克类45class Tank46 {47int x=0;//坦克的横坐标48int y=0;//坦克的纵坐标49int derect;//0上 1右 2下 3左50int speed=1;//设置坦克的速度51int color;//设置坦克颜⾊52public int getColor() {53return color;54 }55public void setColor(int color) {56this.color = color;57 }58public int getDerect() {59return derect;60 }61public void setDerect(int derect) {62this.derect = derect;63 }64public int getX() {65return x;66 }67public void setX(int x) {68this.x = x;69 }70public int getY() {71return y;72 }73public void setY(int y) {74this.y = y;75 }7677public Tank(int x,int y){78this.x=x;79this.y=y;80 }81 }82class Hero extends Tank{83 Shot s=null;//⼦弹是和坦克关联的84public Hero (int x,int y){85super(x,y);86 }87public void shotEnermy(){//⼦弹和坦克⽅向相关 8889switch(this.derect){90case 0:91 s=new Shot(x+10,y-9,0);92break;93case 1:94 s=new Shot(x+38,y+9,1);95break;96case 2:97 s=new Shot(x+10,y+37,2);98break;99100case 3:101 s=new Shot(x-9,y+9,3);102break;103 }104 Thread t=new Thread(s);105 t.start();106 }107//坦克向上移动108public void moveUp(){109 y-=speed;110 }111//坦克向右移动112public void moveRight(){113 x+=speed;114 }//坦克向下移动115public void moveDown(){116 y+=speed;117 }118//坦克向左移动119public void moveLeft(){120 x-=speed;121 }122123124 }125class Enermy extends Tank{126public Enermy (int x,int y){127super(x,y);128 }129 }效果如下:。

c语言坦克大战最新代码

c语言坦克大战最新代码
} key=bioskey(0);
judge_tank_my(map,key);/*判断己方坦克运动函数*/
} aaa: ; } void map_all(int map[15][15])/*初始化地图函数*/ { int i,j; for(i=0;i<15;i++)
for(j=0;j<15;j++) switch(map[j][i]) { case 0: break; case 5:map_wall(i,j);break;/*地形*/ case 6:map_steel(i,j);break; case 7:map_water(i,j);break; case 8:map_border(i,j);break; case 9:map_base(i,j);break; }
void uptank(int i,int j,int color);/*画坦克函数*/ void downtank(int i,int j,int color); void lefttank(int i,int j,int color); void righttank(int i,int j,int color);
/* Note:Your choice is C IDE */ #include "graphics.h" #include "stdlib.h" #include "stdio.h"
#define a_UP 0x4800/*定义A坦克按键*/ #define a_DOWN 0x5000 #define a_LEFT 0x4b00 #define a_RIGHT 0x4d00 #define a_shoot 0x1c0d
void judge_moveshootway(int map[15][15],int i);/*炮弹运动时判断炮弹方 向函数*/ void judge_shoot(int m,int map[15][15],int i);/*判断炮弹打中的物体函数 */ void judge_shootway(int map[15][15],int i);/*炮弹打中物体时判断方向函 数*/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

坦克大战游戏编程实现
游戏编程实现坦克大战
坦克大战是一款经典的电子游戏,在游戏中,玩家将控制一个坦克,通过操作坦克的移动和攻击,与其他玩家或电脑进行战斗。

本文将介
绍如何使用编程语言实现坦克大战游戏。

设计思路
在实现坦克大战游戏之前,首先需要明确游戏的基本要素和规则。

玩家将操作一个坦克,通过键盘或操纵杆控制坦克的移动和攻击。


戏画面由地图、坦克、子弹等元素构成。

坦克可以向前、向后、向左、向右移动,可以发射子弹进行攻击。

玩家需要躲避敌方坦克的攻击,
同时尽可能击败敌方坦克。

编程实现
坦克的移动和攻击可以通过编程语言来实现。

以下是使用Java语言来编写坦克大战游戏的示例代码:
```java
public class TankGame extends JFrame {
private Tank tank; // 玩家坦克
private List<Tank> enemyTanks; // 敌方坦克列表
private List<Bullet> bullets; // 子弹列表
public TankGame() {
// 初始化游戏窗口
this.setSize(800, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);
// 初始化玩家坦克
tank = new Tank(400, 500);
// 初始化敌方坦克列表
enemyTanks = new ArrayList<>();
enemyTanks.add(new Tank(100, 100));
enemyTanks.add(new Tank(300, 200));
// 初始化子弹列表
bullets = new ArrayList<>();
// 添加键盘监听器,控制坦克移动和攻击
this.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
int keycode = e.getKeyCode();
switch (keycode) {
case KeyEvent.VK_UP:
tank.moveUp();
break;
case KeyEvent.VK_DOWN: tank.moveDown();
break;
case KeyEvent.VK_LEFT: tank.moveLeft();
break;
case KeyEvent.VK_RIGHT: tank.moveRight();
break;
case KeyEvent.VK_SPACE: bullets.add(tank.fire());
break;
default:
break;
}
// 重新绘制游戏画面
repaint();
}
@Override
public void keyReleased(KeyEvent e) { }
@Override
public void keyTyped(KeyEvent e) { }
});
}
// 绘制游戏画面
public void paint(Graphics g) {
super.paint(g);
// 绘制玩家坦克
tank.draw(g);
// 绘制敌方坦克
for (Tank enemyTank : enemyTanks) { enemyTank.draw(g);
}
// 绘制子弹
for (Bullet bullet : bullets) {
bullet.draw(g);
}
}
public static void main(String[] args) {
new TankGame();
}
}
```
在上述示例代码中,我们创建了一个继承自JFrame的主窗口,并
在窗口中添加了一个玩家坦克、敌方坦克和子弹的列表。

通过添加键
盘监听器,玩家可以控制坦克的移动和攻击。

游戏画面的绘制使用了Graphics类的draw方法。

总结
通过编程语言实现坦克大战游戏需要定义坦克、子弹等游戏元素的类,并在主程序中处理用户输入、更新游戏状态并实时绘制游戏画面。

上述示例代码只是一个简单的实现,读者可以根据自己的需求进行扩
展和优化。

希望读者通过本文的介绍,能够对坦克大战游戏的编程实
现有一个初步了解并能够尝试自己动手实践。

相关文档
最新文档