基于Python pygame简易版斗兽棋小游戏源代码
游戏规则如下:
胜利条件:
1.吃掉对方全部棋子
2.走入对方兽穴(不可进入自己洞穴)
吃法:
1.象>狮>虎>豹>狼>狗>猫>鼠>象
2.同类棋子先行者吃掉对方
3.老鼠可以进河,老鼠在河里时,岸上的动物不能捕食他,他也不能捕食岸上的动物
4.狮\虎在河中没有老鼠阻挡时可以跳过河,并可吃掉对岸的较小的动物
5.进入敌方陷阱后,任意一个棋子都可以吃掉他。
main.py:主程序,控制游戏的进行状况
menu:创建图形界面
level:棋局进行中的主要类和方法
piece.py:棋子类,提供控制棋子的方法
board.py:生成棋盘
piece.json:储存了创建棋子实例的信息
完整程序代码下载地址:基于Python pygame简易版斗兽棋小游戏源代码
main.py
import sys
import pygame
import pygame_gui
from settings import *
from level import Level
from menu import Start_menu
class Game(object):
def __init__(self):
#窗口
pygame.init()
self.screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption('斗兽棋')
self.clock = pygame.time.Clock()
#Controller
self.level = Level()
self.start_menu_ = Start_menu()
#游戏状态
self.game_over = True
@property
def controller(self):
""" 根据游戏状态选择Controller """
if self.game_over:
return self.start_menu_
else:
return self.level
def run(self):
self.controller.game_over = self.game_over #保证切换Controller后其状态与当前游戏状态一致
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
self.controller.reponse_click(event.pos)
if event.type == pygame_gui.UI_BUTTON_PRESSED:
self.controller.reponse_button(event.ui_element)
self.controller.manager.process_events(event)
delta_time = self.clock.tick(20) / 1000
self.controller.run(delta_time)
self.game_over = self.controller.game_over
pygame.display.update()
if __name__ == '__main__':
game = Game()
while True:
game.run()
board.py
import pygame
from settings import *
font = pygame.font.Font(FONT, 30)
class Board(pygame.sprite.Sprite):
def __init__(self,group,width,height):
super().__init__(group)
self.width = width
self.height = height
self.image = pygame.Surface((width*50,height*50))
self.rect = self.image.get_rect()
self.draw_board()
def draw_board(self):
""" 绘制棋盘 """
self.image.fill('white')
#画格子
for x in range(self.width):
for y in range(self.height):
pygame.draw.rect(self.image,"black", (x*50, y*50, 50, 50), 1)
#河流
for pos in RIVER:
pygame.draw.rect(self.image,"deepskyblue",(pos[0]*50, pos[1]*50,50,50),0)
#陷阱
for t in TRAP:
for pos in t:
trap_surface=font.render("陷",True,"blue","white")
self.image.blit(trap_surface,(pos[0]*50+DETA_X, pos[1]*50+ DETA_Y))
#兽穴
for pos in HOME:
home_surface = font.render("穴",True,"blue","white")
self.image.blit(home_surface,(pos[0]*50+ DETA_X, pos[1]*50+ DETA_Y))
def update(self):
pass
完整程序代码下载地址:基于Python pygame简易版斗兽棋小游戏源代码