import pygame
import pygame.font
import sys
import traceback
import copy
from math import sqrt
from pygame.locals import *
pygame.init()
pygame.font.init()
pygame.mixer.init()
#用于控制顺序
order = True
#用于结束游戏后阻止落子
working = False
#用来存储棋子信息,主要用于悔棋
backups = []
#定义棋子半径
r = 40
#一格代表的像素
#直接安格子存放,打印时计算像素
i = 90
#用于控制局内音效
listening = True
#音乐
beijing = pygame.mixer.Sound("音乐/背景.wav")
beijing.set_volume(0.2)
anjian = pygame.mixer.Sound("音乐/按键.wav")
anjian.set_volume(0.2)
chizi = pygame.mixer.Sound("音乐/吃子.wav")
chizi.set_volume(0.2)
huiqi = pygame.mixer.Sound("音乐/悔棋.wav")
huiqi.set_volume(0.2)
luozi = pygame.mixer.Sound("音乐/落子.wav")
luozi.set_volume(0.2)
yinqi = pygame.mixer.Sound("音乐/赢棋.wav")
yinqi.set_volume(0.2)
beijing.play(-1)
#绘制棋盘
def Draw_a_chessboard(screen):
#填充背景色
#screen.fill((233,204,138))
beijing = pygame.image.load("棋盘及按键/背景.png").convert_alpha()
screen.blit(beijing,(0,0))
beijingkuang = pygame.image.load("棋盘及按键/框.png").convert_alpha()
screen.blit(beijingkuang,(0,0))
xianshikuang = pygame.image.load("棋盘及按键/显示框.png").convert_alpha()
screen.blit(xianshikuang,(960,90))
#画‘播放,静音’‘开始,暂停’‘悔棋’‘重新开始’和‘退出’按钮
if listening:
bofang = pygame.image.load("棋盘及按键/播放.png").convert_alpha()
screen.blit(bofang,(1010,260))
else:
jingyin = pygame.image.load("棋盘及按键/静音.png").convert_alpha()
screen.blit(jingyin,(1010,260))
if not working:
zantingzhong = pygame.image.load("棋盘及按键/暂停中.png").convert_alpha()
screen.blit(zantingzhong,(960,90))
kaishi = pygame.image.load("棋盘及按键/开始.png").convert_alpha()
screen.blit(kaishi,(960,330))
else:
zanting = pygame.image.load("棋盘及按键/暂停.png").convert_alpha()
screen.blit(zanting,(960,330))
huiqi = pygame.image.load("棋盘及按键/悔棋.png").convert_alpha()
screen.blit(huiqi,(960,460))
chongxinkaishi = pygame.image.load("棋盘及按键/重新开始.png").convert_alpha()
screen.blit(chongxinkaishi,(960,590))
tuichu = pygame.image.load("棋盘及按键/退出游戏.png").convert_alpha()
screen.blit(tuichu,(960,720))
#画外框
outer_frame_color = (60,20,0)
pygame.draw.rect(screen,outer_frame_color,[80,80,830,740],5)
#行
inner_frame_color = (0,0,0)
for i in range(1,10):
pygame.draw.line(screen, inner_frame_color, (90, 90*i), (900, 90*i))
#列
for i in range(1,11):
pygame.draw.line(screen,inner_frame_color, (90*i, 90), (90*i, 810))
#‘将’
jiang_rote_color = (0,0,0)
pygame.draw.lines(screen, jiang_rote_color, True,[(90, 360),(270, 360),(270,540),(90,540)],3)
pygame.draw.lines(screen, jiang_rote_color, True,[(720, 360),(900, 360),(900,540),(720,540)],3)
#‘士’路线
shi_rote_color = (0,0,0)
pygame.draw.line(screen, shi_rote_color, (90, 360), (270, 540),3)
pygame.draw.line(screen, shi_rote_color, (90, 540), (270, 360),3)
pygame.draw.line(screen, shi_rote_color, (720, 360), (900, 540),3)
pygame.draw.line(screen, shi_rote_color, (720, 540), (900, 360),3)
#‘象’路线
xiang_rote_color = (0,0,0)
pygame.draw.lines(screen, xiang_rote_color, True,[(270, 450),(90, 270),(270,90),(450,270)])
pygame.draw.lines(screen, xiang_rote_color, True,[(270, 450),(90, 630),(270,810),(450,630)])
pygame.draw.lines(screen, xiang_rote_color, True,[(720, 450),(900, 270),(720,90),(540,270)])
pygame.draw.lines(screen, xiang_rote_color, True,[(720, 450),(900, 630),(720,810),(540,630)])
#‘兵’,用抗锯齿连续线段
bing_rote_color = (255,0,0)
for j in range(0,2):
for k in range(0,4):
pygame.draw.aalines(screen, bing_rote_color, False,[(330+270*j, 260+180*k),(350+270*j, 260+180*k),(350+270*j,240+180*k)],3)
pygame.draw.aalines(screen, bing_rote_color, False,[(390+270*j, 260+180*k),(370+270*j, 260+180*k),(370+270*j,240+180*k)],3)
pygame.draw.aalines(screen, bing_rote_color, False,[(330+270*j, 100+180*k),(350+270*j, 100+180*k),(350+270*j,120+180*k)],3)
pygame.draw.aalines(screen, bing_rote_color, False,[(390+270*j, 100+180*k),(370+270*j, 100+180*k),(370+270*j,120+180*k)],3)
#‘炮’
pao_rote_color = (255,0,0)
for m in range(0,2):
for n in range(0,2):
pygame.draw.aalines(screen, pao_rote_color, False,[(240+450*m, 170+540*n),(260+450*m, 170+540*n),(260+450*m,150+540*n)],3)
pygame.draw.aalines(screen, pao_rote_color, False,[(300+450*m, 170+540*n),(280+450*m, 170+540*n),(280+450*m,150+540*n)],3)
pygame.draw.aalines(screen, pao_rote_color, False,[(240+450*m, 190+540*n),(260+450*m, 190+540*n),(260+450*m,210+540*n)],3)
pygame.draw.aalines(screen, pao_rote_color, False,[(300+450*m, 190+540*n),(280+450*m, 190+540*n),(280+450*m,210+540*n)],3)
#绘制‘楚河汉界’
chuhehanjie = pygame.image.load("棋盘及按键/楚河汉界.png").convert_alpha()
screen.blit(chuhehanjie,(451,91))
#绘制棋子
def Draw_a_chessman(screen,color,qizi,x,y):
if color == 'red':
if qizi == '将':
hongjiang = pygame.image.load("棋子/红将.png").convert_alpha()
screen.blit(hongjiang,(x-45,y-45))
elif qizi[0] == '士':
hongshi = pygame.image.load("棋子/红士.png").convert_alpha()
screen.blit(hongshi,(x-45,y-45))
elif qizi[0] == '相':
hongxiang = pygame.image.load("棋子/红相.png").convert_alpha()
screen.blit(hongxiang,(x-45,y-45))
elif qizi[0] == '马':
hongma = pygame.image.load("棋子/红马.png").convert_alpha()
screen.blit(hongma,(x-45,y-45))
elif qizi[0] == '车':
hongche = pygame.image.load("棋子/红车.png").convert_alpha()
screen.blit(hongche,(x-45,y-45))
elif qizi[0] == '炮':
hongpao = pygame.image.load("棋子/红炮.png").convert_alpha()
screen.blit(hongpao,(x-45,y-45))
elif qizi[0] == '兵':
hongbing = pygame.image.load("棋子/红兵.png").convert_alpha()
screen.blit(hongbing,(x-45,y-45))
elif color == 'black':
if qizi == '将':
heijiang = pygame.image.load("棋子/黑将.png").convert_alpha()
screen.blit(heijiang,(x-45,y-45))
elif qizi[0] == '士':
heishi = pygame.image.load("棋子/黑士.png").convert_alpha()
screen.blit(heishi,(x-45,y-45))
elif qizi[0] == '相':
heixiang = pygame.image.load("棋子/黑相.png").convert_alpha()
screen.blit(heixiang,(x-45,y-45))
elif qizi[0] == '马':
heima = pygame.image.load("棋子/黑马.png").convert_alpha()
screen.blit(heima,(x-45,y-45))
elif qizi[0] == '车':
heiche = pygame.image.load("棋子/黑车.png").convert_alpha()
screen.blit(heiche,(x-45,y-45))
elif qizi[0] == '炮':
heipao = pygame.image.load("棋子/黑炮.png").convert_alpha()
screen.blit(heipao,(x-45,y-45))
elif qizi[0] == '兵':
heibing = pygame.image.load("棋子/黑兵.png").convert_alpha()
screen.blit(heibing,(x-45,y-45))
#绘制带有棋盘的棋子
def Draw_a_chessboard_with_chessman(screen):
Draw_a_chessboard(screen)
for each_qizi in hongqi.keys():
Draw_a_chessman(screen,hongqi[each_qizi]['color'],each_qizi,hongqi[each
Pathon开发象棋小游戏总文件
5星 · 超过95%的资源 需积分: 50 70 浏览量
2018-08-20
17:15:59
上传
评论 6
收藏 41.52MB ZIP 举报
hwt1070359898
- 粉丝: 763
- 资源: 12