基于Python实现有趣的象棋游戏

作者:木木子学python 时间:2022-06-11 20:37:15 

导语

一直以来,中国象棋都是中华民族的一种象征,当然也是人们最为喜感的一种娱乐方式。

在若干年前,人们都习惯于约上自己的棋友,来一种激战。可是,科技改变人类,也改版了人们的生活方式。现如今,越来越多的玩家开始偏向于下载中国象棋游戏,这样一来,无论何时何地,只要打开手机或者电脑,就可以轻松游戏了。

哈喽。我是你们的木木子同学,今天小编给大家用代码写一款中国象棋。

中国象棋是一种起源于中国的古老而智慧的棋类游戏,有着悠久的历史和广泛的群众基础。中国象棋使用方形格状棋盘,圆形棋子共有32个,红黑二色各有16个棋子,摆放和活动在交叉点上。中国象棋的规则简单易懂,但是变化无穷,富有趣味和挑战性。

木子玩了一天,这个游戏的对战水平很高,自己跟自己下?o(╯□╰)o智商有限啊,快来个人跟我一起下!

一、游戏介绍

中国象棋游戏是一款怡神益智有益身心的游戏。象棋集文化、科学、艺术、竞技于一身,不但可以开发智力,启迪思维,锻炼辨证分析能力和培养顽强的意志,而且可以修心养性,陶冶情操,丰富文化生活,趣味性极强。

棋盘桌上尽风流,厮杀几曾休?妙手连珠,滴水不漏,谈笑写春秋。棋子红黑两分明,却在混浊中。阴风阵阵,杀气重重,逐鹿谁为雄?

二、游戏规则

游戏规则太长了,跟平常现实中旗子的走向一样的,这里就不给大家一个一个解说了。大家可以自己直接百度一下就行。

三、环境准备

1)运行环境 

 开发环境:Python3、Pycharm社区版、Pygame,tkinter部分自带的模块安装Python即可使用。

 2)模块安装 

 第三方库的安装方式如下:

 一般安装:pip install +模块名 

 镜像源安装:pip install -i pypi.douban.com/simple/+模块名…

 (还有很多国内镜像源,这里是豆瓣的用习惯了,其他镜像源可以去看下之前文章都有的) 

四、代码展示

1)模块导入

import pygame as pg
import sys
import tkinter as tk
from tkinter import *
import tkinter.filedialog,tkinter.messagebox
from threading import Thread
import time,os,re

2)主程序

def gettime():
   t=time.strftime('%Y%m%d%H%M%S',time.localtime())
   return t

def on_closing():
   if tkinter.messagebox.askokcancel("退出", "你确定要退出吗?"):
       root.destroy()
       os._exit(1)

root = tk.Tk()
embed = tk.Frame(root, width = 900, height = 764) #creates embed frame for pygame window
embed.grid(columnspan = (600), rowspan = 500) # Adds grid
embed.pack(side = LEFT) #packs window to the left
root.title('中国象棋')
root.resizable(False,False)
root.protocol("WM_DELETE_WINDOW", on_closing)
os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
os.environ['SDL_VIDEODRIVER'] = 'windib'
#棋子65
filename=tkinter.StringVar()
countqipu=0
step=0
def openfile():
   global filename
   file=tkinter.filedialog.askopenfilename()
   filename.set(file)
   file_name=os.path.basename(file)
   compile=re.compile(r'\d{14}')
   content=compile.search(file_name)
   if content:
       restart()
       tkinter.messagebox.showinfo('提示', "载入棋谱成功")
   else:
       tkinter.messagebox.showerror('提示', "载入棋谱失败")
def writeqipu():
   global countqipu
   if countqipu==0:
       with open('{}'.format(gettime()+'.txt'),'w') as f:
           f.write(str(selectlist)+'\n'+str(chesslist)+'\n'+str(value_list)+'\n'+str(ischizi_list)+'\n'+str(death_value))
           countqipu+=1

def upstep():
   global step,countqipu,running
   running=False
   if filename.get()!='':
       try:
           print('开始上一步')
           with open(filename.get(),'r') as f:
               info=f.readlines()
               for i,j in enumerate(info):
                   info[i]=j.replace('\n','')
           select_list=eval(info[0])
           chess_list=eval(info[1])
           valuelist=eval(info[2])
           ischizilist=eval(info[3])
           deathvalue_list=eval(info[4])
           countqipu+=1
           print(info)
           if step>0:
               selecttuple=select_list[step-1]
               chesstuple=chess_list[step-1]
               chessvalue=valuelist[step-1]
               czpd=ischizilist[step-1]
               deathvalue=deathvalue_list[step-1]
               if czpd:
                   list[chesstuple[0]][chesstuple[1]]=deathvalue
                   list[selecttuple[0]][selecttuple[1]] = chessvalue
               else:
                   list[chesstuple[0]][chesstuple[1]]=0
                   list[selecttuple[0]][selecttuple[1]] = chessvalue
               step -= 1
       except Exception as e:
           print(e)
   else:
       print('未载入棋谱')

def downstep():
   global step,countqipu,running
   running=False
   if filename.get() != '':
       print('开始下一步')
       try:
           with open(filename.get(),'r') as f:
               info=f.readlines()
               for i,j in enumerate(info):
                   info[i]=j.replace('\n','')
           select_list=eval(info[0])
           chess_list=eval(info[1])
           valuelist=eval(info[2])
           print(info)
           countqipu+=1
           print(step)
           # if running:
           step += 1
           if step>0:
               selecttuple=select_list[step-1]
               chesstuple=chess_list[step-1]
               chessvalue=valuelist[step-1]
               print(chessvalue,chesstuple[0],chesstuple[1])
               list[selecttuple[0]][selecttuple[1]]=0
               list[chesstuple[0]][chesstuple[1]]=chessvalue
       except Exception as e:
           print(e)
   else:
       print('未载入棋谱')

def auto():
   global step,countqipu,running
   running=False
   button2.config(state=tkinter.DISABLED)
   button3.config(state=tkinter.DISABLED)
   if filename.get() != '':
       # if running:
       try:
           print('开始下一步')
           with open(filename.get(),'r') as f:
               info=f.readlines()
               for i,j in enumerate(info):
                   info[i]=j.replace('\n','')
           select_list=eval(info[0])
           chess_list=eval(info[1])
           valuelist=eval(info[2])
           countqipu+=1
           step += 1
           if step>0:
               selecttuple=select_list[step-1]
               chesstuple=chess_list[step-1]
               chessvalue=valuelist[step-1]
               print(chessvalue,chesstuple[0],chesstuple[1])
               list[selecttuple[0]][selecttuple[1]]=0
               list[chesstuple[0]][chesstuple[1]]=chessvalue
           button4.after(1000, auto)
       except Exception as e:
           print(e)
   else:
       print('未载入棋谱')

五、效果展示

1)开始界面

基于Python实现有趣的象棋游戏

2)游戏界面

基于Python实现有趣的象棋游戏

3)游戏中

基于Python实现有趣的象棋游戏

来源:https://juejin.cn/post/7206302271079694396

标签:Python,象棋,游戏
0
投稿

猜你喜欢

  • JavaScript中的64位加密及解密

    2009-12-23 19:10:00
  • php支持中文字符串分割的函数

    2023-11-18 21:42:04
  • laravel接管Dingo-api和默认的错误处理方式

    2023-11-21 23:29:37
  • 玩转MySQL中的外键约束之PHP篇

    2010-03-18 10:20:00
  • 一位网友的DIV CSS编码笔记——XieBiji

    2008-09-12 12:22:00
  • python数据处理之Pandas类型转换的实现

    2021-04-11 11:17:36
  • ASP+FSO+框架实现ASP生成htm并分页的方法(批量)

    2009-03-09 18:26:00
  • Golang 操作TSV文件的实战示例

    2023-07-18 06:46:01
  • Python使用OpenCV对图像进行缩放功能

    2022-05-06 03:47:51
  • Javascript 回调和事件(翻译)

    2009-03-28 11:47:00
  • Python3 如何开启自带http服务

    2023-07-27 14:33:46
  • 将Reporting services的RDL文件拷贝到另外一台机器时报Data at the root level is invalid的解决方法

    2012-07-11 15:33:45
  • SQL Server数据库和Oracle行转列的特殊方案描述

    2010-07-26 15:14:00
  • python实现最速下降法

    2023-08-10 18:19:51
  • 从Vista地址栏到网站导航菜单

    2009-09-08 12:35:00
  • python2.7和NLTK安装详细教程

    2021-03-30 22:41:19
  • PHP设计模式之解释器模式浅析

    2023-05-29 02:28:16
  • js 玩转正则表达式之语法高亮

    2023-06-24 05:35:42
  • 浅谈python新手中常见的疑惑及解答

    2022-06-23 18:45:40
  • asp利用xmlhttp抓取特定网页内容例子

    2008-10-10 12:58:00
  • asp之家 网络编程 m.aspxhome.com