前言

本游戏的类型有点像大家小时候玩过的拳皇,可以进行游戏人物的选择,相信我绝对好玩!!!
废话不多说吧,大家记得给小编点个赞哈,一键三连才是小编更新的动力!!

相关文件

想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复双人对战游戏
Python源码、问题解答学习交流群:773162165

开发环境

Python版本:3.6.7
相关模块:
pygame

以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

游戏玩法

1号玩家: WASD控制方向,J、K是普攻,L是大招,不过大招都是需要捡资源才可以的。
2号玩家: ↑↓←→控制方向,1、2是普攻,3是大招,不过大招都是需要捡资源才可以的。

效果展示

视频效果(b站)

Python实现一个类似拳皇的双人对战游戏!

图片效果
选择开始界面: ↑↓控制选择按钮,开始游戏还是退出游戏,按回车键(字母键盘的)确认。

1号玩家: WASD控制选择的英雄人物,按回车键(字母键盘)确认。
2号玩家: ↑↓←→控制选择的英雄人物,按回车键(数字键盘)确认。

对战中会有

游戏结束

代码实现

运行代码

import sys
import pygame as pg
from data.main import main
import cProfileif __name__=='__main__':main()pg.quit()sys.exit()
# 砖块种类
kindOfBrick = {'grass_left': {'name': 'images/bricks/grass_left', 'dur': 25,'movable':0},'grass_middle': {'name': 'images/bricks/grass_middle', 'dur': 25,'movable':0},'grass_right': {'name': 'images/bricks/grass_right', 'dur': 25,'movable':0},'grass_inside': {'name': 'images/bricks/grass_inside', 'dur': 25,'movable':0},'long_wood':{'name':'images/bricks/long_wood', 'dur': 50,'movable':0},'long_stone':{'name':'images/bricks/long_stone', 'dur': 10000,'movable':0},'cool_grass_left':{'name':'images/bricks/cool_grass_left','dur':25,'movable':0},'cool_grass_mid':{'name':'images/bricks/cool_grass_mid','dur':25,'movable':0},'cool_grass_right':{'name':'images/bricks/cool_grass_right','dur':25,'movable':0},'cool_grass_inside_left':{'name':'images/bricks/cool_grass_inside_left','dur':25,'movable':0},'cool_grass_inside_mid':{'name':'images/bricks/cool_grass_inside_mid','dur':25,'movable':0},'cool_grass_inside_right':{'name':'images/bricks/cool_grass_inside_right','dur':25,'movable':0},'left_grass': {'name':'images/bricks/left_grass','dur':25,'movable':0},'right_grass':{'name':'images/bricks/right_grass','dur':25,'movable':0},'water':{'name':'images/bricks/water','dur':10000,'movable':1,'frame':2},'fire':{'name':'images/bricks/fire','dur':50,'movable':0},'iron_up_left':{'name':'images/bricks/iron_up_left','dur':300,'movable':0},'iron_down_left':{'name':'images/bricks/iron_down_left','dur':300,'movable':0},'iron_up_right':{'name':'images/bricks/iron_up_right','dur':300,'movable':0},'iron_down_right': {'name': 'images/bricks/iron_down_right', 'dur': 300,'movable':0},'iron':{'name':'images/bricks/iron','dur':300,'movable':0},'ice':{'name':'images/bricks/ice','dur':50,'movable':0},'glass':{'name':'images/bricks/glass','dur':100,'movable':0},'broken_glass':{'name':'images/bricks/glass0','dur':50,'movable':0}
}#背景种类
kindOfGround={'grass_surface':['grass_left', 'grass_middle', 'grass_right'],'grass_soil':['grass_inside', 'grass_inside', 'grass_inside'],'long_wood':['long_wood', 'long_wood', 'long_wood'],'long_stone':['long_stone', 'long_stone', 'long_stone'],'cool_grass_surface':['cool_grass_left','cool_grass_mid','cool_grass_right'],'cool_grass_soil':['cool_grass_inside_left','cool_grass_inside_mid','cool_grass_inside_right'],'air_grass':['left_grass','cool_grass_inside_mid','right_grass'],'water':['water','water','water'],'fire':['fire','fire','fire'],'iron':['iron_up_right','iron','iron_up_left'],'long_iron':['iron','iron','iron'],'ice':['ice','ice','ice'],'glass':['glass','glass','glass'],}# 道具种类
kindOfProps = {'Prop_HP_potion': {'name': 'images/Prop_HP_potion.png', 'dur': 25},'Prop_MP_potion': {'name': 'images/Prop_MP_potion.png', 'dur': 25},'Prop_HP_Apple': {'name': 'images/Prop_HP_Apple.png', 'dur': 25},'Prop_HP_Ginseng': {'name': 'images/Prop_HP_Ginseng.png', 'dur': 25},'Prop_Shoe': {'name': 'images/shoe.png', 'dur': 25},'Prop_Corselet': {'name': 'images/Prop_Corselet.png', 'dur': 25},
}

Control类

class Control(object):''' Control object for entire project '''def __init__(self, caption):self.screen = pg.display.get_surface()self.done = Falseself.clock = pg.time.Clock()self.current_time = 0.0self.keys = pg.key.get_pressed()self.caption = captionself.state_dict = {}self.state_name = Noneself.state = Noneself.font = pg.font.SysFont("arial", 24)def setup_states(self, state_dict, start_state):self.state_dict = state_dictself.state_name = start_stateself.state = self.state_dict[self.state_name]# For testpersist = self.state.cleanup()self.state.startup(self.current_time, persist)def update(self):self.current_time = pg.time.get_ticks()#print(self.current_time)if self.state.quit:self.done = Trueelif self.state.done:self.flip_state()self.state.update(self.screen, self.keys, self.current_time)def flip_state(self):previous, self.state_name = self.state_name, self.state.nextpersist = self.state.cleanup()self.state = self.state_dict[self.state_name]self.state.startup(self.current_time, persist)self.state.previous = previousdef event_loop(self):for event in pg.event.get():if event.type == pg.QUIT:self.done = Trueelif event.type == pg.KEYDOWN:self.keys = pg.key.get_pressed()elif event.type == pg.KEYUP:self.keys = pg.key.get_pressed()self.state.get_event(event)def show_fps(self):text_surface = self.font.render(str(int(self.clock.get_fps())), False, c.WHITE)self.screen.blit(text_surface, (c.SCREEN_WIDTH-24, c.SCREEN_HEIGHT-24))def main(self):while not self.done:self.event_loop()self.update()self.show_fps()pg.display.update()self.clock.tick(c.FPS)#print(self.clock.get_fps())

_State类

class _State(object):def __init__(self):self.start_time = 0.0self.current_time = 0.0self.current_screen_bottom=c.SCREEN_HEIGHTself.done = Falseself.quit = Falseself.next = Noneself.previous = Noneself.persist = {}def get_event(self, event):passdef startup(self, current_time, persistant):self.persist = persistantself.start_time = current_timedef cleanup(self):self.done = Falsereturn self.persistdef update(self, surface, keys, current_time):passdef load_all_music(directory, accept=('.wav', '.mp3', '.ogg', '.mdi', '.flac')):songs = {}for song in os.listdir(directory):name, ext = os.path.splitext(song)if ext.lower() in accept:songs[name] = os.path.join(directory, song)#print(songs.values())return songs

MainMenu类

class MainMenu(tools._State):def __init__(self):super(MainMenu, self).__init__()self.reset_game_info()self.startup(0.0, self.persist)def startup(self, current_time, persist):#self.game_info = persist#self.persist = self.game_infoself.next = c.CHOOSINGself.state = c.PLAYself.setup_background()#self.setup_cursor()self.setup_UI()#self.setup_BGM()def setup_UI(self):self.UI = {c.PLAY: [{'image': pg.transform.scale(pg.image.load('images/UI/start_game.png'), (150, 50))},{'image': pg.transform.scale(pg.image.load('images/UI/start_game.png'), (180, 60))}],c.QUIT: [{'image': pg.transform.scale(pg.image.load('images/UI/exit_game.png'), (150, 50))},{'image': pg.transform.scale(pg.image.load('images/UI/exit_game.png'), (180, 60))}]}for state, k in zip(self.UI.keys(), range(0, 2)):for i in range(0, 2):rect = self.UI[state][i]['image'].get_rect()rect.centerx = c.SCREEN_WIDTH // 2rect.centery = 450 + 60 * kself.UI[state][i]['rect'] = rectdef setup_background(self):self.background = pg.transform.scale(pg.image.load('images/%s' % c.TITLE_SCREEN), c.SCREEN_SIZE)self.background_rect = self.background.get_rect()def setup_cursor(self):pass# self.cursor.image = pg.Surface([c.TITLE_CURSOR_WIDTH, c.TITLE_CURSOR_HEIGHT])# self.cursor.image.set_colorkey(c.BLACK)# self.cursor.rect = self.cursor.image.get_rect()# self.cursor.rect.x = 350# self.cursor.rect.y = 300# self.cursor.state = c.PLAYdef update(self, surface, keys, current_time):self.current_time = current_timeself.game_info[c.CURRENT_TIME] = self.current_timeself.update_cursor(keys)self.blit_everything(surface)def update_cursor(self, keys):if self.state == c.PLAY:if keys[pg.K_DOWN]:self.state = c.QUITif keys[pg.K_RETURN]:self.reset_game_info()self.done = Trueelif self.state == c.QUIT:if keys[pg.K_UP]:self.state = c.PLAYif keys[pg.K_RETURN]:self.quit = Truedef blit_everything(self, surface):surface.blit(self.background, self.background_rect)# surface.blit(self.cursor.image, self.cursor.rect)for state in self.UI.keys():if state == self.state:surface.blit(self.UI[state][1]['image'], self.UI[state][1]['rect'])else:surface.blit(self.UI[state][0]['image'], self.UI[state][0]['rect'])def get_event(self, event):passdef reset_game_info(self):self.game_info = {c.P1_CHARACTER: '',c.P2_CHARACTER: '',c.CURRENT_TIME: 0.0,c.P1_HP: 0,c.P2_HP: 0,c.P1_HEART: 0,c.P2_HEART: 0,}self.persist = self.game_infodef setup_BGM(self):pg.mixer.music.load('music/{}'.format(c.TITLE_BGM))pg.mixer.music.play()

代码确实有点多,就不全部展示给大家
公众号:Python日志
需要源码的小伙伴可以在公众号回复双人对战游戏
Python源码、问题解答学习交流群:773162165
那今天就先到这里了,小编的好好休息了,害!
别的不说,记得一键三连就完事啦!!

【Python游戏】可以实现双人对战游戏,类似拳皇可以选英雄的 绝对好玩 | 附带源码相关推荐

  1. 【Python恶搞】Python恶搞项目代码合集:连续发送信息、弹窗、祝福单身狗 | 附带源码

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 公众号:Python日志 可以关注小编公众号,会不定时的发布一下Python小技巧,还有很多资源可以免费领取哟!! 源码领取:加Pyth ...

  2. 出自北大教授java项目大鱼吃小鱼游戏开发教学 附带源码和资料

    课程介绍: 大鱼吃小鱼,又称吞食鱼,是一款动作类小游戏.通过不断的吞吃比自己小的鱼类快速成长,最终成为海洋霸主. 本课程讲解一个大鱼吃小鱼游戏的详细开发过程.只要60分钟就可以完成一个你自己亲手开发出 ...

  3. python面试题及答案bt_公布上期Python笔试题答案,附带源码与运行结果

    今天发布的内容没有废话,就是上一期的笔试题答案,由于内容较多,我们今天就公布前五道题的答案,附带源码哦!请感兴趣的读者细细研究! 笔试 笔试题一答案:利用Python创建如图所示的二叉树,并给出前序. ...

  4. python量化策略源码_【Python量化投资】趋向系统指标策略 ADX、DMI指标用于股票池(附源码)...

    原标题:[Python量化投资]趋向系统指标策略 ADX.DMI指标用于股票池(附源码) [什么是ADX] ADX(average directional indicator) 平均趋向指数,常用的趋 ...

  5. 用python求解:用户分别输入外援半径和内圆半径,计算圆环的面积;及用户分别输入圆柱的底面圆半径和高,输出圆柱和表面积。(附带源码)

    用python求解:用户分别输入外援半径和内圆半径,计算圆环的面积:及用户分别输入圆柱的底面圆半径和高,输出圆柱和表面积.(附带源码) 纯分享一下平时练习题: 运算结果如下 源代码如下: import ...

  6. Python基于改进YOLOv5的烟叶病害检测系统(附带源码)

    Python基于改进YOLOv5的烟叶病害检测系统(附带源码) 1.背景 2.前言 3.烟叶数据集的采集 4.烟叶数据集的标注 5.烟叶检测训练&识别效果 6.病害数据集的采集 7.病害数据集 ...

  7. 用Python写一个双人对战足球小游戏,堪比国足的技术【附带源码】

    开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理介绍 这是一个 ...

  8. 【Python游戏】Python实现一个可以切换单人或双人对战乒乓球小游戏 | 附带源码

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复 乒乓球 Pytho ...

  9. 【Python游戏】双人对战足球小游戏,堪比国足的技术 | 附带源码

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 公众号:Python日志 可以关注小编公众号,会不定时的发布一下Python小技巧,还有很多资源可以免费领取哟!! 源码领取:加Pyth ...

最新文章

  1. RSync实现文件备份同步
  2. 面试使用计算机,面试相关之计算机基础
  3. mysql grant proxy on_MySQL 5.7权限的介绍
  4. C#进阶系列——AOP?AOP!
  5. 嘉年华回顾丨 王津银带你深入解析自动化运维能力框架
  6. 转换图片保持画质_图片格式怎么相互转换,如何转换jpg、 bmp、png格式
  7. 做地推怎么跟人打招呼
  8. python情感分析词典_基于情感词典的文本情感分析
  9. java如何开发安卓软件_Java 程序员如何快速入门 Android 开发?
  10. mysql数据库面试题学生表_SQL笔试题:下面是学生表(student)的结构说明
  11. Error in cool_function[1] : object of type ‘closure‘ is not subsettable
  12. 掘金15W沸点简单分析(一)
  13. 三种非对称加密算法总结
  14. try catch finally 执行简介
  15. 谷歌插件安装(不翻墙方式)
  16. 安卓导出Excel,txt文件工具类
  17. 检测网页是否打开开发者工具(检测F12)
  18. php json数据 转义,PHP JSON字符串,转义JS输出的双引号
  19. Elasticsearch: date时间数据格式踩过的坑
  20. maven配置阿里云镜像 settings.xml文件配置

热门文章

  1. Power BI——切片器
  2. Octapeptide-2 在促进头发生长方面的功效
  3. 【MySQL】SQL语句进阶-创建sql练习环境
  4. 13岁出道,16岁被小扎看中,19岁成脸书最年轻工程师,如今跳槽谷歌只为了.……
  5. 网络管理 三大通信模式之桥接模式
  6. 15、SQL Server 触发器
  7. 《奋斗》第二季 陆涛和米莱结婚啦……
  8. 预计2021年下半年软考成绩查询时间
  9. 信息学奥赛题解1168
  10. FOC——13.电流采样与运放电路