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

news/2025/3/14 17:03:27/

前言

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

相关文件

想学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
那今天就先到这里了,小编的好好休息了,害!
别的不说,记得一键三连就完事啦!!


http://www.ppmy.cn/news/907972.html

相关文章

django和flask以WSGI的形式部署在windows

waitress安装和使用过程 1、下载 pip install waitress2、使用 waitress可以平替uwsgi和gunicorn,在django项目的根目录创建run.py(文件名随意),内容如下: 2.1、django下配置 from waitress import serve from app…

AI绘画StableDiffusion实操教程:冰霜旗袍美女

飞书原文链接,获取更多资源:AI绘画StableDiffusion实操教程:冰霜旗袍美女 前几天分享了StableDiffusion的入门到精通教程:AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通 但是还有人就问&#xff1a…

计算机安全模式无法启动修复,教你如何在安全模式下修复电脑故障

1、安全模式下的病毒查杀 对于那些在Windows下进行杀毒清除不了的病毒。可以启动安全模式,把病毒彻底清除了。 2、安全模式下还原系统 如果电脑无法正常进入系统,此时可以考虑进入安全模式,进入安全模式之后,点击“开始”“所有程…

计算机网安全模式,电脑安全模式有什么用?

经常使用电脑的朋友,有点电脑基础的小伙伴对安全模式几个字都不会陌生,安全模式是windows操作系统中一种特殊模式。但有很多小伙伴不知道电脑安全模式有什么用,由小编来告诉你们吧! 在安全模式下用户可以轻松地修复系统的一些错误,比如升级电脑驱动导致的蓝屏就可以在安全…

计算机进入安全模式的原因,教你进入电脑的安全模式

如果我们的电脑出现故障,我们最常见的方法就是进入电脑安全模式进行修复,说到电脑安全模式还有很多小伙伴不知道是什么东西,下面小编给您详细讲解下电脑安全模式以及进入电脑安全模式的操作流程。 系统出现故障无法进入的时候怎么办呢&#x…

win10计算机安全模式怎么,Win10笔记本电脑如何简单进入安全模式

我们有时候使用笔记本电脑时需要进入安全模式进行查毒什么的,那么Win10笔记本电脑如何进入安全模式呢,通常都是通过设置那里进入安全模式,十分复杂,下面就由学习啦小编跟大家分享简单的方法吧,希望对大家有所帮助~ Win…

如何启用计算机安全模式,如何使电脑进入安全模式

有时候临时有事情要离开电脑旁边,但是正在进行的工作不能让别人看到,这时候关机也会很不方便,甚至有时候电脑不安全很容易进入病毒。那么下面我们就来看看怎么样进入电脑的安全模式,让你的电脑安全一点吧。 方法一 01当你在启动计…

[IOI2019] 天桥

这是一道很好的由部分分推正解的题目。 首先前两档部分分就直接暴力找到所有的交点,然后跑dijkstra就行。这个启示我们要尝试减少交点的个数达到O(n)级别,然后连边跑dijkstra。(大致的思路是,找点->连边->跑最短路&#xf…