前言
本游戏的类型有点像大家小时候玩过的拳皇,可以进行游戏人物的选择,相信我绝对好玩!!!
废话不多说吧,大家记得给小编点个赞哈,一键三连才是小编更新的动力!!
相关文件
想学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号玩家: ↑↓←→控制选择的英雄人物,按回车键(数字键盘)确认。
对战中会有
游戏结束
扫描二维码关注公众号,回复:
14139623 查看本文章
代码实现
运行代码
import sys
import pygame as pg
from data.main import main
import cProfile
if __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 = False
self.clock = pg.time.Clock()
self.current_time = 0.0
self.keys = pg.key.get_pressed()
self.caption = caption
self.state_dict = {
}
self.state_name = None
self.state = None
self.font = pg.font.SysFont("arial", 24)
def setup_states(self, state_dict, start_state):
self.state_dict = state_dict
self.state_name = start_state
self.state = self.state_dict[self.state_name]
# For test
persist = 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 = True
elif 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.next
persist = self.state.cleanup()
self.state = self.state_dict[self.state_name]
self.state.startup(self.current_time, persist)
self.state.previous = previous
def event_loop(self):
for event in pg.event.get():
if event.type == pg.QUIT:
self.done = True
elif 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.0
self.current_time = 0.0
self.current_screen_bottom=c.SCREEN_HEIGHT
self.done = False
self.quit = False
self.next = None
self.previous = None
self.persist = {
}
def get_event(self, event):
pass
def startup(self, current_time, persistant):
self.persist = persistant
self.start_time = current_time
def cleanup(self):
self.done = False
return self.persist
def update(self, surface, keys, current_time):
pass
def 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_info
self.next = c.CHOOSING
self.state = c.PLAY
self.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 // 2
rect.centery = 450 + 60 * k
self.UI[state][i]['rect'] = rect
def 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.PLAY
def update(self, surface, keys, current_time):
self.current_time = current_time
self.game_info[c.CURRENT_TIME] = self.current_time
self.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.QUIT
if keys[pg.K_RETURN]:
self.reset_game_info()
self.done = True
elif self.state == c.QUIT:
if keys[pg.K_UP]:
self.state = c.PLAY
if keys[pg.K_RETURN]:
self.quit = True
def 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):
pass
def 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_info
def setup_BGM(self):
pg.mixer.music.load('music/{}'.format(c.TITLE_BGM))
pg.mixer.music.play()
代码确实有点多,就不全部展示给大家
公众号:Python日志
需要源码的小伙伴可以在公众号回复双人对战游戏
Python源码、问题解答学习交流群:773162165
那今天就先到这里了,小编的好好休息了,害!
别的不说,记得一键三连就完事啦!!