Python3 + pygame实现的90坦克大战代码完整有演示效果

本文作者使用Python3和pygame库重现经典游戏‘坦克大战’,代码量约1000行。分享完整代码,旨在帮助学习者,展现教育情怀。文章包括游戏显示效果展示和代码分享。
摘要由CSDN通过智能技术生成

我是一个典型的80后,年轻时玩过了特别多的游戏,所以这几天用Python3 + pygame实现了一个另外小游戏“坦克大战”(其他的游戏,请翻阅我的博客)

本实例代码量有些多,完整的版本在1000行左右(当然了如果再次优化的话会减少一部分)

分享出来,希望能帮助到大家,毕竟自己做教育行业做了这么多年,还是教育情怀的,哈哈哈哈哈

一,显示效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
前言: 作者系四川大学计算机科学系毕业,但是毕业后十几年都没有编过程序,干的工作有抄水电表,网管,销售工作,最近发现人渐渐老去,有心愿未了,于是最近跟着网络视频教学,学习了一下VC++和面向对象编程,就自已小时候最爱玩的坦克大战为练习,来熟悉和巩固对VC++的学习。 本作特点: 1. 可能是世界上最接近“坦克大战”原作的VC程序. 几乎99%相似模拟度。 2. 本作还特别包括“90”加强版。 3. 即时存档,读档功能。 4. 即时回退,时光倒流功能。 5. 播放战斗录相功能。 6. 智能躲避敌方攻击的功能。(在演示状态) 7. 敌方智能躲避工方攻击的功能。(在TANKE90模式) 8. 对Win7兼容性不好, 运行会变慢 9. 本作是精确到象素级的模拟原作了. 如何编译: 1. 运行VC6. 2. 用打开工作空间的方式, 打开Tank.dsw 3. 如编译出现Diretx方面的错,请下载directx8程序包http://115.com/file/clqzomlm#dx81sdk.zip 加入到你的VC6里面, 如何安装请查网上. 4. 根目录下有Tank.exe已经编译好的了, 你可以试一试, 360可能会误报, 但保证没有病毒. 不信你自已编译好后, 也可能会误报 后记: 本次放出的是DirectX版本, 如有其它问题请联系作者. 作者邮箱: romman@163.com 另外,还有一个CFrame版本,和一个WIN32版本,这两个版本效率不高,但兼容性好,有需要的联系。
当然,我可以为你提供一个简单的射游戏完整代码示例。以下是一个使用Python 3和Pygame实现的基本射击游戏代码: ```python import pygame import random import math # 初始化pygame pygame.init() # 创建游戏窗口 screen = pygame.display.set_mode((800, 600)) # 设置窗口标题 pygame.display.set_caption("射击游戏") # 加载背景图片 background = pygame.image.load("background.jpg") # 加载玩家图片 player_img = pygame.image.load("player.png") player_x = 370 player_y = 480 player_x_change = 0 # 加载敌人图片 enemy_img = [] enemy_x = [] enemy_y = [] enemy_x_change = [] enemy_y_change = [] num_of_enemies = 6 for i in range(num_of_enemies): enemy_img.append(pygame.image.load("enemy.png")) enemy_x.append(random.randint(0, 735)) enemy_y.append(random.randint(50, 150)) enemy_x_change.append(4) enemy_y_change.append(40) # 加载子弹图片 bullet_img = pygame.image.load("bullet.png") bullet_x = 0 bullet_y = 480 bullet_y_change = 10 bullet_state = "ready" score_value = 0 font = pygame.font.Font("freesansbold.ttf", 32) text_x = 10 text_y = 10 def show_score(x, y): score = font.render("得分:" + str(score_value), True, (255, 255, 255)) screen.blit(score, (x, y)) def player(x, y): screen.blit(player_img, (x, y)) def enemy(x, y, i): screen.blit(enemy_img[i], (x, y)) def fire_bullet(x, y): global bullet_state bullet_state = "fire" screen.blit(bullet_img, (x + 16, y + 10)) def is_collision(enemy_x, enemy_y, bullet_x, bullet_y): distance = math.sqrt(math.pow(enemy_x - bullet_x, 2) + math.pow(enemy_y - bullet_y, 2)) if distance < 27: return True else: return False # 游戏主循环 running = True while running: screen.fill((0, 0, 0)) screen.blit(background, (0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player_x_change = -5 if event.key == pygame.K_RIGHT: player_x_change = 5 if event.key == pygame.K_SPACE: if bullet_state == "ready": bullet_x = player_x fire_bullet(bullet_x, bullet_y) if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: player_x_change = 0 player_x += player_x_change if player_x <= 0: player_x = 0 elif player_x >= 736: player_x = 736 for i in range(num_of_enemies): enemy_x[i] += enemy_x_change[i] if enemy_x[i] <= 0: enemy_x_change[i] = 4 enemy_y[i] += enemy_y_change[i] elif enemy_x[i] >= 736: enemy_x_change[i] = -4 enemy_y[i] += enemy_y_change[i] collision = is_collision(enemy_x[i], enemy_y[i], bullet_x, bullet_y) if collision: bullet_y = 480 bullet_state = "ready" score_value += 1 enemy_x[i] = random.randint(0, 735) enemy_y[i] = random.randint(50, 150) enemy(enemy_x[i], enemy_y[i], i) if bullet_y <= 0: bullet_y = 480 bullet_state = "ready" if bullet_state == "fire": fire_bullet(bullet_x, bullet_y) bullet_y -= bullet_y_change player(player_x, player_y) show_score(text_x, text_y) pygame.display.update() # 退出游戏 pygame.quit() ``` 请注意,这只是一个简单的示例代码,你需要有背景图片、玩家图片、敌人图片和子弹图片来运行这个游戏。你可以根据自己的需要进行修改和扩展。希望对你有帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值