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

前言

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

相关文件

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

猜你喜欢

转载自blog.csdn.net/Gtieguo/article/details/124047179