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

 更新时间:2023年03月06日 08:26:47   作者:木木子学python  
一直以来,中国象棋都是中华民族的一种象征,当然也是人们最为喜感的一种娱乐方式。这篇文章主要介绍了如何基于Python实现有趣的象棋游戏,感兴趣的可以了解一下

导语

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

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

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

中国象棋是一种起源于中国的古老而智慧的棋类游戏,有着悠久的历史和广泛的群众基础。中国象棋使用方形格状棋盘,圆形棋子共有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)开始界面

​2)游戏界面

​3)游戏中

到此这篇关于基于Python实现有趣的象棋游戏的文章就介绍到这了,更多相关Python象棋内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3的unicode编码转换成中文的问题及解决方案

    Python3的unicode编码转换成中文的问题及解决方案

    这篇文章主要介绍了Python3的unicode编码转换成中文的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • python内置函数compile(),complex()的使用

    python内置函数compile(),complex()的使用

    这篇文章主要为大家详细介绍了python内置函数compile(),complex()的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Python configparser模块操作代码实例

    Python configparser模块操作代码实例

    这篇文章主要介绍了Python configparser模块操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 深入学习Python可变与不可变对象操作实例

    深入学习Python可变与不可变对象操作实例

    Python中的数据类型可以分为可变对象和不可变对象,了解它们之间的区别对于编写高效的Python代码至关重要,本文将详细介绍可变对象和不可变对象的概念,以及如何正确地使用它们来提高代码的性能和可读性
    2023-12-12
  • Python实现基本线性数据结构

    Python实现基本线性数据结构

    这篇文章主要实现四种数据结构,分别是数组、堆栈、队列、链表。大家都知道可以用C语言实现这几种数据结构,其实Python也可以实现,下面跟着小编一起来学习。
    2016-08-08
  • Pytorch加载图像数据集的方法

    Pytorch加载图像数据集的方法

    这篇文章主要介绍了Pytorch加载图像数据集的方法,加载图像数据集(这里以分类为例),通常都需要经过两个步骤:定义数据集和创建Dataloader数据加载器,本文通过代码示例和图文讲解的非常详细,需要的朋友可以参考下
    2024-08-08
  • Python中IP地址处理IPy模块的方法

    Python中IP地址处理IPy模块的方法

    这篇文章主要介绍了Python中IP地址处理IPy模块的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • python中树与树的表示知识点总结

    python中树与树的表示知识点总结

    在本篇文章里小编给大家分享的是关于python中树与树的表示的相关知识点,需要的读者们学习下吧。
    2019-09-09
  • Django框架基础模板标签与filter使用方法详解

    Django框架基础模板标签与filter使用方法详解

    这篇文章主要介绍了Django框架基础模板标签与filter使用方法,简单分析了Django模板基本语法、函数与自定义filter相关使用技巧,需要的朋友可以参考下
    2019-07-07
  • 浅析Django接口版本控制

    浅析Django接口版本控制

    一个项目在升级迭代的时候,不会立马抛弃旧的版本,甚至会出现多个版本共存同时维护的情况,因此需要版本控制
    2021-06-06

最新评论