求一个编写的五子棋小游戏python的代码,求借鉴啊!!急急急。。。

作者&投稿:能菲 (若有异议请与网页底部的电邮联系)
急急急求python的五子棋代码,要能支持双人对战与人机对弈的~求大神帮忙~~

去google搜搜“python
五子棋
人机对弈”吧。这类的代码很多的。

你都做到这个程度了,当然就是高手了。 把棋子位置放在一个数据里。然后做一个路径搜索算法。只搜索8个方向,如果某个方向有5个子连在一起就赢了。


这是个笨方法,还有很多优化的地方,比如上一次搜索后,建立一个路径数组。下一次,只需要检验上一次结果,并将新的棋子放进路径里就可以了。 这样就效率很高了。

具体的你自己研究。这个对你来说应该轻松啦。

#五子棋import appuifw,e32,key_codes
from graphics import *def cn(x):return x.decode('utf-8')
def quit(): _quit=1
global running
running=1
def redraw(rect): canvas.blit(img)def default():
 global con,color,font
 con={"l":15,"x":15,"y":33,"r":13,"n":15}
 color={"bg":0x7777bb,"fg":0x333333,"p1":0x000000,"p2":0xffffff,"w":0xff0000}
 font=u"Sans MT 936_S60"def initial():
 global img,canvas,con,color,cur_x,cur_y,turn,pos1,pos2,pos
 appuifw.app.screen='full'
 appuifw.app.body=canvas=appuifw.Canvas()
 img=Image.new((240,320))
 img.clear(color["bg"])
 cur_x=7
 cur_y=7
 turn=1
 pos1=[]
 pos2=[]
 pos=[]
 for i in range(con["n"]*con["n"]):
  pos.append(0)def paint_back():
 global img,color,font
 #img.text((90,25),cn('欢乐五子棋'),color["fg"],font)
 for i in range(con["x"],con["x"]+con["l"]*con["n"]-1,con["l"]):
  img.line((i,con["y"],i,con["y"]+con["l"]*(con["n"]-1)),color["fg"])
 for i in range(con["y"],con["y"]+con["l"]*con["n"]-1,con["l"]):
  img.line((con["x"],i,con["x"]+con["l"]*(con["n"]-1),i),color["fg"])
 img.text((40,270),cn('玩家1'),color["p1"],font)
 img.text((160,270),cn('玩家2'),color["p2"],font)
 img.point((90,263),color["p1"],width=con["r"],fill=color["p1"])
 img.point((144,263),color["p2"],width=con["r"],fill=color["p2"])
 
def paint_cur(x,y,sh):
 global img,con,color,pos1,pos2,running
 if running<>1:return
 ax=con["x"]+con["l"]*x
 ay=con["y"]+con["l"]*y
 b=con["l"]/2
 if sh<>0:
  c=color["p"+str(sh)]
  if rp((x,y))<>0:
   c=color["w"]
 if sh==0:
  c=color["bg"]
 img.line((ax-b,ay-2,ax-b,ay-b,ax-2,ay-b),c)
 img.line((ax-b,ay+2,ax-b,ay+b,ax-2,ay+b),c)
 img.line((ax+b,ay-2,ax+b,ay-b,ax+2,ay-b),c)
 img.line((ax+b,ay+2,ax+b,ay+b,ax+2,ay+b),c)
 redraw(())def paint_q(x,y,z):
 global img,con,color
 ax=con["x"]+con["l"]*x
 ay=con["y"]+con["l"]*y
 b=con["l"]/2
 if z==0:
  c=color["bg"]
 else:
  c=color["p"+str(z)]
 img.point((ax,ay),c,width=con["r"],fill=c)
 redraw(())
 if z==0:
  img.line((ax-b,ay,ax+b,ay),c)
  img.line((ax,ay-b,ax,ay+b),c)
  
def k_up():
 global cur_x,cur_y,con,turn
 paint_cur(cur_x,cur_y,0)
 cur_y=cur_y-1
 if cur_y==-1:
  cur_y=con["n"]-1
 paint_cur(cur_x,cur_y,turn)def k_down():
 global cur_x,cur_y,con,turn
 paint_cur(cur_x,cur_y,0)
 cur_y=cur_y+1
 if cur_y==con["n"]:
  cur_y=0
 paint_cur(cur_x,cur_y,turn)def k_left():
 global cur_x,cur_y,con,turn
 paint_cur(cur_x,cur_y,0)
 cur_x=cur_x-1
 if cur_x==-1:
  cur_x=con["n"]-1
 paint_cur(cur_x,cur_y,turn)def k_right():
 global cur_x,cur_y,con,turn
 paint_cur(cur_x,cur_y,0)
 cur_x=cur_x+1
 if cur_x==con["n"]:
  cur_x=0
 paint_cur(cur_x,cur_y,turn)def rp(x):
 global con,pos
 if (x[0]<0 or x[0]>=con["n"] or x[1]<0 or x[1]>=con["n"]):return 0
 #print x,pos[x[0]*con["n"]+x[1]]
 return pos[x[0]*con["n"]+x[1]]def wp(x,y):
 global con,pos
 pos[x[0]*con["n"]+x[1]]=y
  
def win():
 for i in pos1:
  k=0
  for j in range(0,6):
   if rp((i[0]+j,i[1]))==1:
    k=k+1
   else:
    break
  if k>=5:
   return 1
  k=0
  for j in range(0,6):
   if rp((i[0],i[1]+j))==1:
    k=k+1
   else:
    break
  if k>=5:
   return 1
  k=0
  for j in range(0,6):
   if rp((i[0]+j,i[1]+j))==1:
    k=k+1
   else:
    break
  if k>=5:
   return 1
  k=0
  for j in range(0,6):
   if rp((i[0]+j,i[1]-j))==1:
    k=k+1
   else:
    break
  if k>=5:
   return 1 for i in pos2:
  k=0
  for j in range(0,6):
   if rp((i[0]+j,i[1]))==2:
    k=k+1
   else:
    break
  if k>=5:
   return 2
  k=0
  for j in range(0,6):
   if rp((i[0],i[1]+j))==2:
    k=k+1
   else:
    break
  if k>=5:
   return 2
  k=0
  for j in range(0,6):
   if rp((i[0]+j,i[1]+j))==2:
    k=k+1
   else:
    break
  if k>=5:
   return 2
  k=0
  for j in range(0,6):
   if rp((i[0]+j,i[1]-j))==2:
    k=k+1
   else:
    break
  if k>=5:
   return 2
 return 0
 
def k_enter():
 global cur_x,cur_y,turn,pos1,pos2,con,color,font,running
 if running<>1:return
 if rp((cur_x,cur_y))==0:
  if turn==1:
   pos1.append((cur_x,cur_y))
   img.rectangle((35,255,100,272),color["bg"])
   img.rectangle((135,255,200,272),color["p2"])
  if turn==2:
   pos2.append((cur_x,cur_y))
   img.rectangle((35,255,100,272),color["p1"])
   img.rectangle((135,255,200,272),color["bg"])
  paint_q(cur_x,cur_y,turn)
  wp((cur_x,cur_y),turn)
  if win()<>0:
   #img.text((80,300),cn('玩家')+str(turn)+cn("获胜!"),color["fg"],font)
   img.rectangle((35,255,100,272),color["bg"])
   img.rectangle((135,255,200,272),color["bg"])
   paint_cur(cur_x,cur_y,0)
   running=2
 turn=3-turn
 paint_cur(cur_x,cur_y,turn)def bindkey():
 canvas.bind(key_codes.EKeyUpArrow, k_up)
 canvas.bind(key_codes.EKeyDownArrow,k_down)
 canvas.bind(key_codes.EKeyLeftArrow, k_left)
 canvas.bind(key_codes.EKeyRightArrow,k_right)
 canvas.bind(key_codes.EKeySelect,k_enter)default()
initial()
paint_back()
paint_cur(cur_x,cur_y,1)
img.rectangle((35,255,100,272),color["p1"])
bindkey()redraw(())
appuifw.app.exit_key_handler = quit()
_quit=0
while (1-_quit):
 e32.ao_sleep(0.2)
 redraw(())


import random

# 初始化棋盘
board = [[' ' for _ in range(15)] for _ in range(15)]

# 保存棋盘历史记录
board_history = []

# 打印棋盘
def print_board():
print('=== 五子棋 ===')
print(' ' + ' '.join(chr(i+65) for i in range(15)))
for i in range(15):
print(f'{i:2}', end=' ')
for j in range(15):
print(f'{board[i][j]}', end=' ')
print()

# 将字母转换为数字
def letter_to_number(letter):
return ord(letter.upper()) - 65

# 判断是否有玩家获胜
def check_winner(row, col, player):
directions = [(0, 1), (1, 0), (1, 1), (-1, 1)]

for d in directions:
count = 1
x, y = row, col

while True:
x += d[0]
y += d[1]

if 0 <= x < 15 and 0 <= y < 15 and board[x][y] == player:
count += 1
else:
break

x, y = row, col

while True:
x -= d[0]
y -= d[1]

if 0 <= x < 15 and 0 <= y < 15 and board[x][y] == player:
count += 1
else:
break

if count >= 5:
return True

return False

# 计算电脑落子位置
def get_computer_move():
available_moves = []

for i in range(15):
for j in range(15):
if board[i][j] == ' ':
available_moves.append((i, j))

return random.choice(available_moves)

# 游戏主循环
print('=== 五子棋游戏 ===')
print('请选择游戏模式:')
print('1. 玩家对电脑')
print('2. 玩家对玩家')

mode = input('请输入游戏模式的编号:')

if mode == '1':
print('玩家1执黑棋(X),玩家2执白棋(O)。')
players = ['X', 'O']
elif mode == '2':
print('玩家执黑棋(X),电脑执白棋(O)。')
players = ['X', 'O']
else:
print('无效的模式选择,退出游戏。')
exit()

player_turn = 0 # 记录当前轮到哪位玩家落子

while True:
print_board()

player = players[player_turn]

# 玩家落子
if player == 'X' or mode == '2' and player == 'O':
move = input(f'请玩家{player_turn+1}输入落子位置(如A1):')
else:
move = get_computer_move()

if str(move).lower() == 'q':
print('游戏结束,退出游戏。')
break

if str(move).lower() == 'h':
if len(board_history) == 0:
print('无法悔棋,没有棋局记录。')
continue
else:
print('悔棋成功!')
board = board_history.pop()
player_turn = 1 - player_turn # 切换到另一个玩家
continue

if player == 'X' or mode == '2' and player == 'O':
try:
col = letter_to_number(move[0])
row = int(move[1:])
except (ValueError, IndexError):
print('无效的输入,请重新输入。')
continue

if not (0 <= row < 15 and 0 <= col < 15):
print('无效的位置,请重新输入。')
continue

if board[row][col] != ' ':
print('该位置已经有棋子,请重新输入。')
continue
else:
row, col = move

# 保存当前棋局到历史记录
board_history.append([row[:] for row in board])

board[row][col] = player

if check_winner(row, col, player):
print_board()
if player == 'X':
print(f'玩家1获胜!')
else:
if mode == '1':
print(f'玩家2获胜!')
else:
print(f'电脑获胜!')
break

if all(board[i][j] != ' ' for i in range(15) for j in range(15)):
print_board()
print('游戏平局!')
break

player_turn = 1 - player_turn # 切换到另一个玩家


求一个用C语言编写五子棋游戏的全部代码.
使用语言:C++使用工具:vs2019

五子棋游戏程序设计(VB)
一、五子棋游戏程序设计二、主要内容设计一个程序能完成五子棋游戏的功能。五子棋的规则:双方各执一色棋子,轮流下子(即将棋子放在棋盘的任一空交叉点上),直到有一方的棋子有5个排... 一、五子棋游戏程序设计 二、主要内容 设计一个程序能完成五子棋游戏的功能。 五子棋的规则:双方各执一色棋子,轮流下子(即将...

求一个c语言编写的五子棋游戏代码
include<ctype.h> include<stdio.h> include<dos.h> #include<conio.h> #include<ctype.h> #include<bios.h> define SHURU 1 define FANGXIANG 2 define WUXIAO 0 define TUICHU 3 \/*** ***\/ static int ii = 0, jj = 0, wanj ia = 1;\/*** ***\/ void hqp(int a[][20], ...

五子棋的程序设计.
1。只适用于人先下,机器后下的情况。有了“五子棋第三方版.exe”来制作下棋界面,就只需要编写下棋算法,而不必考虑其它的问题了。2.当运行“五子棋第三方版.exe”程序时,该程序接受人下棋位置,然后调用“wzq.exe”程序,由“wzq.exe”程序计算出机器的应对并写入到“当前棋子.txt”文件中(结束...

C++编写五子棋游戏
这个你若是用vc写的话,有挑战性啊,首先棋盘的绘制你要想方法,但是有控件,不过光看这个控件的代码就够你受的,其次就是关键中的关键啊如何用电脑判断怎么走,其实我又想过就是用多维数组的方法,多层循环嵌套,但是没实践,还有棋盘的画法我也想过就是用图片框代替,创建棋盘数组,全用素组的话...

如何编写一个五子棋C或C++程序,跟同学对站用的,没有图形界面的
int Player=1; \/* 切换下棋手标志 1为红方,2为黄方 *\/ int Result=0; \/* 判断输赢标志 *\/ int Chess_minx=50,Chess_miny=50,Chess_maxx=400,Chess_maxy=400; \/* 定义棋盘的最值 *\/ int CountPlayer[2]={0,0}; \/* Player连成一线棋子的个数,CountPlayer[0]表示1,CountPlayer[1]...

数据结构编五子棋
cout<<"A方胜利!是否再来一局?Y\/N:";cin>>replay;if (replay=='Y'||replay=='y'){ main();} else { break;} } x+=2;}else{ cout<<"请B方走:";cin>>i;cin>>j;while(flag[i][j]=='X'||flag[i][j]=='O'){ cout<<endl;cout<<"此地已经有棋子!请重新走:";cin...

求助高手,求一个C语言编写五子棋游戏的程序外加流程图,尤其是流程图谢...
(1)遍历棋盘,看自己是否有五子缺一的情况,假如有,那么补全五子,取胜 (2)查看对家是否有五子缺一的情况,有的话那么围堵 (3)查看自家是否有一个以上两端自由的三子连棋,假如有,那么补足,成为四子连棋,一般保持两端自由,那么下一步棋就赢了,但是假如碰边的话就很麻烦,要进一步检测 (4...

五子棋网络游戏
具体要求:1.用JAVA(J2EE)来编写五子棋网络游戏,实现两个人通过INTERNET进行下棋,服务器可进行时间管理等功能。2.两个人可以聊天,其他人可加入旁观与聊天。有谁能够帮做出,万分... 具体要求: 1.用JAVA(J2EE)来编写五子棋网络游戏,实现两个人通过INTERNET进行下棋,服务器可进行时间管理等功能。 2.两个人可以聊天...

怎样用c语言编写五子棋的棋盘
棋盘如果没有界面,那种有线和框的,就用0放在每个位置,当作一个位置,玩家1如果放下子的话,就将0变成1,玩家2放下棋子,0变成2 复杂的界面,就去找MFC、QT吧struct stu \/\/定义位置记录结构体{ int x; int y;}weizhi;int player=1;int Q[20][20]={0}; \/\/定义数组以记录落...

云浮市19377674662: 求解用python 编写五子棋怎样编写判断输赢的函数,应该从哪方面考虑呢?最好有代码,,,,谢谢 -
武胜益肾: 你都做到这个程度了,当然就是高手了. 把棋子位置放在一个数据里.然后做一个路径搜索算法.只搜索8个方向,如果某个方向有5个子连在一起就赢了.这是个笨方法,还有很多优化的地方,比如上一次搜索后,建立一个路径数组.下一次,只需要检验上一次结果,并将新的棋子放进路径里就可以了. 这样就效率很高了.具体的你自己研究.这个对你来说应该轻松啦.

云浮市19377674662: Python五子棋游戏 不知道从哪里开始做啊 -
武胜益肾: 做游戏,当然先设计类啦,控制,界面,算法,边界定义,各种类先构思好,然后开始做,语法上面基本没什么好说的,代码网上都有很多,语言不同也没关系,参考思路就好

云浮市19377674662: Python五子棋伪代码怎么写 -
武胜益肾: 显示五子棋的操作指南 决定谁先走 创建一个空的五子棋棋盘 把棋盘显示出来 当没有人获胜且不是平局时 一一如果轮到玩家 一一一一得到玩家的行棋位置 一一一一根据行棋位置更新棋盘 一一否则 一一一一计算得出电脑的行棋位置 一一一一根据行棋位置更新棋盘 一一显示棋盘 一一切换行棋方 向赢家表示恭喜或声明平局

云浮市19377674662: 我们想用C++ Builder写一个五子棋小游戏的程序,不知道怎么写,求指教, -
武胜益肾: 第一步,不考虑AI的情况下,先简单实现 单人 点击落子,点一次换一次黑白,落一次子判断一次输赢.第二步,加入socket通信两个人互落子.实现开局,落子,判断输赢,悔棋,认输,重新开局基本操作.第三步,加入AI,人机对战.

云浮市19377674662: 求python 编写的五子棋游戏 -
武胜益肾: 复古风格发挥好

云浮市19377674662: 如何用Python编写一款游戏 -
武胜益肾: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50importrandomclassBig_or_Small:choices=['Big','Small'] def__init__ (self,now_bet,n=3,total=0,...

云浮市19377674662: 用C语言写一个五子棋游戏 -
武胜益肾: *程序中用到的库函数所在头文件应用 #include 命令包含进来 */#include #include...

云浮市19377674662: 怎么写五子棋小程序?
武胜益肾: 一:19*19的棋盘 二:能判断输赢 三:最好是人机对战的 如下部分程序: import java.awt.*; import java.awt.event.*; class wuziqi { public static void main(String args[]) { new frame(); } } class frame extends Frame { frame() { super("五子棋游戏"...

云浮市19377674662: 求用python写关于骰子的游戏!么么哒! -
武胜益肾: 我给你一个简单猜数字游戏的代码吧,很你说的很类似了,你改改就可以用了# -*- coding: utf-8 -*_ import random, easygui secret = random.randint(1, 99) guess = 0 tries = 6 easygui.msgbox(""" AHOY!! 猜一个1到99之间的数,直到猜对为...

云浮市19377674662: 求一个非常简单的python小游戏 -
武胜益肾: http://www.pythontab.com/html/2013/pythongui_0930/578.html 可以看看这个

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网