百度
360搜索
搜狗搜索

简单python五子棋代码,如何用c#窗体做五子棋小游戏,求开始的按钮到对应的代码能整个实现详细介绍

本文目录一览: 在线等!求一个python 五子棋源代码,最好是有“人人对弈”和“人机对弈”功能的,不胜感谢!

试试这个吧。
import numpy as np
import pygame
import sys
import traceback
import copy
from pygame.locals import *
pygame.init()
pygame.mixer.init()
#颜色
background=(201,202,187)
checkerboard=(80,80,80)
button=(52,53,44)
#音乐
play_chess_sound = pygame.mixer.Sound("music/play_chess.wav")
play_chess_sound.set_volume(0.2)
button_sound = pygame.mixer.Sound("music/button.wav")
button_sound.set_volume(0.2)
victor_sound = pygame.mixer.Sound("music/victory.wav")
victor_sound.set_volume(0.2)
#绘制棋盘
def Draw_a_chessboard(screen):
#填充背景色
screen.fill(background)
Background=pygame.image.load("background.jpg").convert_alpha()
screen.blit(Background,(0,0))
#画棋盘
for i in range(21):
pygame.draw.line(screen, checkerboard, (40*i+3, 3), (40*i+3, 803))
pygame.draw.line(screen, checkerboard, (3, 40*i+3), (803, 40*i+3))
#画边线
pygame.draw.line(screen, checkerboard, (3, 3), (803, 3),5)
pygame.draw.line(screen, checkerboard, (3, 3), (3, 803),5)
pygame.draw.line(screen, checkerboard, (803, 3), (803, 803),5)
pygame.draw.line(screen, checkerboard, (3, 803), (803, 803),5)

#画定位点
pygame.draw.circle(screen, checkerboard, (163, 163), 6)
pygame.draw.circle(screen, checkerboard, (163, 643), 6)
pygame.draw.circle(screen, checkerboard, (643, 163), 6)
pygame.draw.circle(screen, checkerboard, (643, 643), 6)
pygame.draw.circle(screen, checkerboard, (403, 403), 6)

#画‘悔棋’‘重新开始’跟‘退出’按钮
pygame.draw.rect(screen,button,[900,350,120,100],5)
pygame.draw.rect(screen,button,[900,500,200,100],5)
pygame.draw.rect(screen,button,[900,650,200,100],5)
s_font=pygame.font.Font('font.ttf',40)
text1=s_font.render("悔棋",True,button)
text2=s_font.render("重新开始",True,button)
text3=s_font.render("退出游戏",True,button)
screen.blit(text1,(920,370))
screen.blit(text2,(920,520))
screen.blit(text3,(920,670))
#绘制棋子(横坐标,纵坐标,屏幕,棋子颜色(1代表黑,2代表白))
def Draw_a_chessman(x,y,screen,color):
if color==1:
Black_chess=pygame.image.load("Black_chess.png").convert_alpha()
screen.blit(Black_chess,(40*x+3-15,40*y+3-15))
if color==2:
White_chess=pygame.image.load("White_chess.png").convert_alpha()
screen.blit(White_chess,(40*x+3-15,40*y+3-15))
#绘制带有棋子的棋盘
def Draw_a_chessboard_with_chessman(map,screen):
screen.fill(background)
Draw_a_chessboard(screen)
for i in range(24):
for j in range(24):
Draw_a_chessman(i+1,j+1,screen,map[i][j])
#定义存储棋盘的列表,
#列表为24列24行是因为判断是否胜利函数里的索引会超出19
#列表大一点不会对游戏有什么影响
map=[]
for i in range(24):
map.append([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
#清零map列表
def clear():
global map
for i in range(24):
for j in range(24):
map[i][j]=0
#判断是否胜利
def win(i, j):
k = map[i][j]
p=[]
for a in range(20):
p.append(0)
for i3 in range(i-4,i+5):
for j3 in range(j-4,j+5):
if (map[i3][j3] == k and i3 - i == j3 - j and i3 <= i and j3 <= j):
p[0]+=1
if (map[i3][j3] == k and j3 == j and i3 <= i and j3 <= j):
p[1]+=1
if (map[i3][j3] == k and i3 == i and i3 <= i and j3 <= j):
p[2]+=1
if (map[i3][j3] == k and i3 - i == j3 - j and i3 >= i and j3 >= j):
p[3]+=1
if (map[i3][j3] == k and j3 == j and i3 >= i and j3 >= j):
p[4]+=1
if (map[i3][j3] == k and i3 == i and i3 >= i and j3 >= j):
p[5]+=1
if (map[i3][j3] == k and i - i3 == j3 - j and i3 <= i and j3 >= j):
p[6]+=1
if (map[i3][j3] == k and i3 - i == j - j3 and i3 >= i and j3 <= j):
p[7]+=1
if (map[i3][j3] == k and j - j3 == i - i3 and i3 <= i + 1 and i3 >= i - 3 and j3 <= j + 1 and j3 >= j - 3):
p[8]+=1
if (map[i3][j3] == k and j == j3 and i3 <= i + 1 and i3 >= i - 3 and j3 <= j + 1 and j3 >= j - 3):
p[9]+=1
if (map[i3][j3] == k and i == i3 and i3 <= i + 1 and i3 >= i - 3 and j3 <= j + 1 and j3 >= j - 3):
p[10]+=1
if (map[i3][j3] == k and j - j3 == i - i3 and i3 >= i - 1 and i3 <= i + 3 and j3 >= j - 1 and j3 <= j + 3):
p[11]+=1
if (map[i3][j3] == k and j == j3 and i3 >= i - 1 and i3 <= i + 3 and j3 >= j - 1 and j3 <= j + 3):
p[12]+=1
if (map[i3][j3] == k and i == i3 and i3 >= i - 1 and i3 <= i + 3 and j3 >= j - 1 and j3 <= j + 3):
p[13]+=1
if (map[i3][j3] == k and i - i3 == j3 - j and i3 <= i + 1 and i3 >= i - 3 and j3 >= j - 1 and j3 <= j + 3):
p[14]+=1
if (map[i3][j3] == k and i3 - i == j - j3 and i3 >= i - 1 and i3 <= i + 3 and j3 <= j + 1 and j3 >= j - 3):
p[15]+=1
if (map[i3][j3] == k and j - j3 == i - i3 and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):
p[16]+=1
if (map[i3][j3] == k and j == j3 and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):
p[17]+=1
if (map[i3][j3] == k and i == i3 and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):
p[18]+=1
if (map[i3][j3] == k and i - i3 == j3 - j and i3 <= i + 2 and i3 >= i - 2 and j3 <= j + 2 and j3 >= j - 2):
p[19]+=1
for b in range(20):
if p[b]==5:
return True
return False
#绘制提示器(类容,屏幕,字大小)
def text(s,screen,x):
#先把上一次的类容用一个矩形覆盖
pygame.draw.rect(screen,background,[850,100,1200,100])
#定义字体跟大小
s_font=pygame.font.Font('font.ttf',x)
#定义类容,是否抗锯齿,颜色
s_text=s_font.render(s,True,button)
#将字放在窗口指定位置
screen.blit(s_text,(880,100))
pygame.display.flip()
#用于控制顺序
t=True
#用于结束游戏后阻止落子
running=True
#主函数
def main():
#将 t,map,running设置为可改的
global t,map,running,maps,r,h
#将map置零
clear()
#定义储存所有棋盘状态的列表(用于悔棋)
map2=copy.deepcopy(map)
maps=[map2]

#定义窗口
screen = pygame.display.set_mode([1200,806])

#定义窗口名字
pygame.display.set_caption("五子棋")

#在窗口画出棋盘,提示器以及按钮
Draw_a_chessboard(screen)
pygame.display.flip()
clock=pygame.time.Clock()
while True:
#只有running为真才能落子,主要用于游戏结束后防止再次落子
if running:
if t:
color=1
text('黑棋落子',screen,54)
else:
color=2
text('白棋落子',screen,54)

for event in pygame.event.get():
#点击x则关闭窗口
if event.type ==pygame.QUIT:
pygame.quit()
sys.exit()

#点击窗口里面类容则完成相应指令
elif event.type == MOUSEBUTTONDOWN:
if event.button == 1:
x,y=event.pos[0],event.pos[1]
for i in range(19):
for j in range(19):
#点击棋盘相应位置
if i*40+3+20
<x<i*40+3+60 and j*40+3+20<y<j*40+3+60 not map[i][j] running:
#在棋盘相应位置落相应颜色棋子

Draw_a_chessman(i+1,j+1,screen,color)

#播放音效

play_chess_sound.play(0)

#在map里面记录落子位置

map[i][j]=color

#将map存入maps

map3=copy.deepcopy(map)

maps.append(map3)

#判断落子后是否有五子一线

if win(i,j):

if t:

text('黑棋胜利,请重新游戏',screen,30)

else:

text('白棋胜利,请重新游戏',screen,30)

#播放音效

victor_sound.play(0)

#阻止再往棋盘落子

running=False

pygame.display.flip()

t=not t

#如果点击‘重新开始’

if 900
<x<1100 and 500<y<600:
#取消阻止

running=True

#播放音效

button_sound.play(0)

#重新开始

main()

#点击‘退出游戏’,退出游戏

elif 900
<x<1100 and 650<y<750:
#播放音效

button_sound.play(0)

pygame.quit()

sys.exit()

#点击‘悔棋’

elif 900
<x<1020 and 350<y<450 len(maps)!="1:
#播放音效

button_sound.play(0)

#删除maps里最后一个元素

del maps[len(maps)-1]

#再将最后一个元素copy给map

map=copy.deepcopy(maps[len(maps)-1])

#切换顺序

t=not t

#将map显示出来

Draw_a_chessboard_with_chessman(map,screen)

#悔棋完成,阻止再次悔棋

x,y=0,0

clock.tick(60)

if __name__ == "__main__":

try:

main()

except SystemExit:

pass

except:

traceback.print_exc()

pygame.quit()

input()
</x
</x
</x
</x

可以玩游戏的代码

五子棋。freegames.cannon1加农炮免费Python游戏五子棋python?-m?freegames.connect1[连接]五子棋。单击一行以放一枚。第一个垂直,水平或对角线连接四枚棋子的玩家获胜!连接4个免费Python游戏数字记忆数字记忆–数字对的益智游戏。单击磁贴以显示数字。匹配两个数字,图块将消失以显示图像。

请用PYTHON编一个小游戏,如五子棋,连连看,贪吃蛇,扫雷,计算器等等

这些游戏都不小啊,很体现功力的。贪吃蛇好象看到过C语言版本的,python的应该了有。
不过很多需要先安装pygame包的。
五子棋、贪吃蛇、扫雷、俄罗斯方块、坦克大战、FlappyBird,
源码地址github
http://download.csdn.net/download/y453717489/4731713
#!/usr/bin/pythonfrom Tkinter import *import randomclass snake(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.body = [(0,0)] self.bodyid = [] self.food = [ -1, -1 ] self.foodid = -1 self.gridcount = 10 self.size = 500 self.di = 3 self.speed = 500 self.top = self.winfo_toplevel() self.top.resizable(False, False) self.grid() self.canvas = Canvas(self) self.canvas.grid() self.canvas.config(width=self.size, height=self.size,relief=RIDGE) self.drawgrid() s = self.size/self.gridcount id = self.canvas.create_rectangle(self.body[0][0]*s,self.body[0][1]*s, (self.body[0][0]+1)*s, (self.body[0][1]+1)*s, fill="yellow") self.bodyid.insert(0, id) self.bind_all("

", self.keyrelease) self.drawfood() self.after(self.speed, self.drawsnake) def drawgrid(self): s = self.size/self.gridcount for i in range(0, self.gridcount+1): self.canvas.create_line(i*s, 0, i*s, self.size) self.canvas.create_line(0, i*s, self.size, i*s) def drawsnake(self): s = self.size/self.gridcount head = self.body[0] new = [head[0], head[1]] if self.di == 1: new[1] = (head[1]-1) % self.gridcount elif self.di == 2: new[0] = (head[0]+1) % self.gridcount elif self.di == 3: new[1] = (head[1]+1) % self.gridcount else: new[0] = (head[0]-1) % self.gridcount next = ( new[0], new[1] ) if next in self.body: exit() elif next == (self.food[0], self.food[1]): self.body.insert(0, next) self.bodyid.insert(0, self.foodid) self.drawfood() else: tail = self.body.pop() id = self.bodyid.pop() self.canvas.move(id, (next[0]-tail[0])*s, (next[1]-tail[1])*s) self.body.insert(0, next) self.bodyid.insert(0, id) self.after(self.speed, self.drawsnake) def drawfood(self): s = self.size/self.gridcount x = random.randrange(0, self.gridcount) y = random.randrange(0, self.gridcount) while (x, y) in self.body: x = random.randrange(0, self.gridcount) y = random.randrange(0, self.gridcount) id = self.canvas.create_rectangle(x*s,y*s, (x+1)*s, (y+1)*s, fill="yellow") self.food[0] = x self.food[1] = y self.foodid = id def keyrelease(self, event): if event.keysym == "Up" and self.di != 3: self.di = 1 elif event.keysym == "Right" and self.di !=4: self.di = 2 elif event.keysym == "Down" and self.di != 1: self.di = 3 elif event.keysym == "Left" and self.di != 2: self.di = 4app = snake()app.master.title("Greedy Snake")app.mainloop()贪食蛇

阅读更多 >>>  java课程设计五子棋,解释五子棋的java代码

如何用批处理和电脑玩五子棋

@echo off&setlocal enabledelayedexpansionmode con: lines=43 cols=110set li39= A B C D E F G H I J K L M N O P Q R Sset li0= ┌─────────────────────────────────────┐set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│Aset var=1for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)for /l %%a in (2,2,36) do (set li%%a= ││ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││)set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│Sset li38= └─────────────────────────────────────┘set str=a b c d e f g h i j k l m n o p q r sfor %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)set li5=!li5! 五 棋 子 人 机 对 战set li7=!li7! 批 处 理set li10=!li10! 电 脑 水 平 中 等set li31=!li31! 由 netbenton 编写完成set li33=!li33! 棋盘设计参照了 batmantitle 批处理五子棋set str=###################set .=0for /l %%a in (1,1,19) do ( set he%%a=!str!&set sh%%a=!str! for /l %%b in (1,1,19) do set [%%a.%%b=0)set .=33for /l %%a in (5,1,19) do ( set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a! set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a! set/a .-=1)set ●=○&set ○=●set zhi=●set say=say::设置电脑IQset idea=@@@@#.1 #@@@@.5 @#@@@.4 @@@#@.2 @@#@@.3 vs0#.1 #.5#.3 $#$.4$#$.2 vs1#@@@##.2 ##@@@#.5 #@@#@#.3 #@#@@#.4 vs2 #@##@@#.4-5 #@@##@#.4-3 #@#@@.3-5 @#@@#.4-1 #@@@##.2-W-1##@@@#.5-W-6 vs3set idea=!idea! ##@@@.4-W-5 @@@##.2-W-1 @##@@#.4-5 #@##@@.3-4 #@#@#@.4-2 @#@#@#.3-5 vs4 ##$#.3-W-6-1 #$##.4-W-1-6 ##$#.5-W-1-6 #$##.2-W-1-6 vs5 ##@@##.2-5-W-6-1 #@#@#.3-w-1-5 ##$.W?4?5$##.W-2-1##$.W-2-3 $##.W-3-4 $##.W-4-1 $#$#$.W-4-2 ##$.W-2-5 ###.W-4-W-1-5 ###.W-2-W-1-5 #$#$#.W-3-W-1-5 #$##$#.W-3-4set idea=!idea! vs7 #$$$#.1-5 @@###.4-3 ###@@.3-4 ###@###.3-5-W-2-6-W-1-7 vs8 ###$###.3-5 vs9 @####.4 ####@.2 #$###.3 ###$#.3set idea=!idea! ###@#.3 #@###.3 $####.3 ####$.3###.3 ###.3 $#$##.2 ##$#$.4 #$##$.3 $##$#.3 $###$.3 vs10set iqam=1000000000:restart(setlocal enabledelayedexpansionfor /l %%a in (0,1,39) do (echo !li%%a!)set li39=!li39! reboot重新开始,exit退出。set li37=!li37! back 悔棋set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:if /i "!var!" equ "Q" goto :quitif /i "!var!" equ "D" (set onez=○&set towz=●&set hou=) else (set onez=●&set towz=○&set hou=)set a!onez!=电脑&set a!towz!=玩家)(set ttr=!idea=%onez%!&set ttr=!ttr=%towz%!set idea=for %%a in (!ttr!) do ( for /f "tokens=1,2 delims=." %%b in ("%%a") do (set %%b=%%c&set idea=!idea! %%b))set ttr=set li27=!li27! !onez! !a%onez%!set li25=!li25! !towz! !a%towz%!set/a pos=10,poh=10&goto :getok):loop(if %zhi% equ %onez% goto :menset .=setlocal enabledelayedexpansionfor %%a in (!idea!) do ( set str=%%a if "!str:~,2!" neq "vs" ( for %%b in (he sh) do ( set all=!%%b1!!%%b2!!%%b3!!%%b4!!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19! if "!all:%%a=!" neq "!all!" ( for /l %%c in (1,1,19) do ( if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam! ) ) ) for %%b in (pi ni) do ( set all=!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!!%%b20!!%%b21!!%%b22!!%%b23!!%%b24!!%%b25!!%%b26!!%%b27!!%%b28!!%%b29!!%%b30!!%%b31!!%%b32!!%%b33! if "!all:%%a=!" neq "!all!" ( for /l %%c in (5,1,33) do ( if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c.%%a.!iqam! ) ) ) ) else ( set/a "iqam=(iqam+1)/8" if %%a equ vs8 if defined . goto :get if %%a equ vs9 if defined . goto :get )))if defined . (goto :get)echo. 已经和棋了 pauseendlocal&goto :restart:men(set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%hou%!%%b:~%%c!)set li38=!li38![%悔:~,24%]clsfor /l %%a in (0,1,39) do (echo !li%%a!)for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)set li38=%li38%set /p user=!say:say=%error%! [列前,行后]: if "!user!" equ "reboot" endlocal&goto :restartif "!user!" equ "exit" goto :quitif "!user!" equ "back" call :悔&goto :menset/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nulif not defined [!poh!.!pos! set error=输入点不存在 &goto :men)if "!he%poh%:~%var%,1!" neq "#" set error=该点已经有子 &goto mengoto :getok:getset `=::取最佳的走法for /l %%z in (!.!,-1,1) do (for /f "tokens=1,2,3 delims=." %%1 in ("!put%%z!") do (for /f "tokens=1-4" %%a in ("%%1 %%2") do ( set iqm=%%3 set vara=!%%a%%b:*%%c=!srqponmlkjihgfedcba0 for %%4 in (!%%2:-^=;!) do ( if "%%4" equ "W" (set/a iqm=iqm/5*3) else ( set/a var=!vara:~19,1!+%%4 if "%%a" equ "he" (set/a poh=%%b,pos=20-var) if "%%a" equ "sh" (set/a poh=20-var,pos=%%b) if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1) if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var)) if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var)) if not defined R!pos!R!poh!R set /a `+=1&set ram!`!=R!pos!R!poh!R set/a R!pos!R!poh!R+=iqm ) ))))set rmk=0for /l %%a in (1,1,!`!) do ( for %%b in (!ram%%a!) do ( for %%c in (!%%b!) do ( if %%c gtr !rmk! set/a rmk=%%c,.=0 if %%c equ !rmk! set rmz!.!=%%b&set/a .+=1 )) )set/a .=!random!%%.for /f "tokens=1,2 delims=R" %%a in ("!rmz%.%!") do (set/a pos=%%a,poh=%%b)rem start set r^&echo !.!^&pause^&exitendlocal&set/a pos=%pos%,poh=%poh%set say=say !z%pos%!!z%poh%!(%poh%)&set error=电脑最后下在::getokset zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!(set/a piph=poh+pos-1,lips=pos*2+1,niph=19+pos-poh,liph=poh*2-1if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)for %%a in ("li!liph! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do ( for /f "tokens=1,2" %%b in (%%a) do ( set/a .=%%c-1 for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!) if "!%%b:%win%=!" neq "!%%b!" set win=y )))(set/a asc%zhi%+=1set 悔= !z%pos%!!z%poh%!!悔!if !win! neq y goto :loop)for /l %%a in (0,1,39) do (echo !li%%a!)set/p= !a%zhi%! %zhi%子 第!asc%zhi%!手 !z%pos%!!z%poh%!(%poh%) 胜出
<nulpauseendlocal&goto :restart:悔if not defined 悔 goto :eofif "!悔:~6,1!" equ "" :eoffor %%a in (!悔:~^,6!) do (set str="%%aset/a" poh="!悔:~2,1!,pos=!悔:~1,1!,liph=poh*2-1,lips=pos*2+1set" piph="poh+pos-1,niph=19+pos-poh,liph=poh*2-1,lips=pos*2+1if" !piph! lss 19 a pips="20-poh)if" else !niph! nips="poh)for" ( "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") for f "tokens="1,2"" %%b="!%%b:~0,%%d!┼!%%b:~%%c!)))set/a" (%%a) set .="%%c-1" %%d (!.!) ))for ("li!liph! !lips!") asc%zhi%-="1set" error="你悔棋,耍赖皮!if" :eofset say="say" !z%pos%!!z%poh%!(%poh%)goto :eof:quittaskkill fi "windowtitle eq 批处理五子棋*" im cmd.exe以上是批处理五子棋的代码和文件,该资源来源于互联网。

python中val本身指向另一个1515的数组。val只能有val[0]val[1],vav[2]报错val[0]和val[1]什么意思?

在这段代码中,val 是一个元素为两个元素的元组的列表,其中第一个元素是一个包含坐标的元组 (x, y),第二个元素是表示棋子颜色的整数(1 表示黑子,2 表示白子)。
val[0] 表示元组 (x, y),val[0][0] 表示元组 (x, y) 中的第一个元素 x,val[0][1] 表示元组 (x, y) 中的第二个元素 y。因此,x=int((val[0][0]-27)/44) 和 y=int((val[0][1]-27)/44) 是将坐标映射到棋盘数组 mp 上的索引。
mp 是一个 15x15 的整数数组,表示棋盘。在每次循环中,如果 val[1] 表示的是白色棋子,则将 mp 数组对应位置上的值设置为 2,否则设置为 1,表示黑子。这个操作的目的是将棋盘上的棋子状态转化为一个整数数组,以便进行五子连珠的判断。

二维数组做五子棋(代码)

package com.test;

import java.util.Scanner;

public class? TestMain{

public static void main(String[] args) {

Scanner console = new Scanner(System.in);

阅读更多 >>>  直播怎么关闭游戏源码(如何关闭直播中的游戏源码?)

char[] name = { '空', '黑', '白' };

int count = 0;// 计数器,用来计算该谁下棋了

char[][] qi = new char[16][16];// 把棋盘情况放进二维数组中

while (true) {

int row = 0;// 初始化从控制台接收到的row和col 的index为0

int col = 0;

if (count == 0) {

print(qi, name[count], row, col);

count++;

}

if (count == 1) {

System.out.println("请黑(@)下棋(i j):");

row = console.nextInt(16)%16;// 从控制台接收到的row的index

col = console.nextInt(16)%16;// 从控制台接收到的col的index

String condition = print(qi, name[count], row, col);

if (condition.length() == 1) {// 下棋正确

count++;

}

if (condition.length() == 2) {// 下棋出现错误,要下的位置已经下过棋子

System.out.println("此位置已经有棋子,黑棋重新再下");

}

if (condition.length() == 3) {// 黑棋子赢

System.out.println("黑棋很给力,白棋是浮云,黑棋赢了");

break;

}

if (condition.length() == 4) {

System.out.println("白棋子赢");

break;

}

}

if (count == 2) {

System.out.println("请白(*)下棋(i j):");

row = console.nextInt(16);

col = console.nextInt(16);

String condition = print(qi, name[count], row, col);

if (condition.length() == 1) {// 打印棋盘

count--;

}

if (condition.length() == 2) {// 下棋出现错误,要下的位置已经下过棋子

System.out.println("此位置已经有棋子,白棋重新再下");

}

if (condition.length() == 3) {

System.out.println("黑棋子赢");

break;

}

if (condition.length() == 4) {

System.out.println("白棋很给力,黑棋是浮云,白棋赢了");

break;

}

}

}

}

/**

* @param qi是装棋盘情况

* @param name轮到谁下棋了

*? ? ? ? ? ? row 行号 col 列号 return true-下棋正确,false-下棋错误,重新下

*/

public static String print(char[][] qi, char name, int row, int col) {

String b = "无";// 初始化下棋是正确的

String str = "0123456789111111";

// 打印下第一行

System.out.print(" ");

for (int i = 0; i < str.length(); i++) {

System.out.print(str.charAt(i));

}

System.out.println();

for (int i = 0; i < qi.length; i++) {

System.out.print(str.charAt(i));

for (int j = 0; j < qi[i].length; j++) {

if (name == '空') { // 还没开始下棋时,棋盘默认显示是'.'

qi[i][j] = '.';

}

if ((name == '黑') && (i == row) && (j == col)) {

if (qi[i][j] != '.') {// 下的位置已经有棋子了,返回false

b = "有棋";

} else {

qi[i][j] = '@';// 黑方下棋后的位置显示是'@'

if (win(qi, '@', row, col)) {

b = "黑棋子";

}

}

}

if ((name == '白') && (i == row) && (j == col)) {

if (qi[i][j] != '.') {

b = "有棋";

} else {

qi[i][j] = '*';// 黑方下棋后的位置显示是'*'

if (win(qi, '*', row, col)) {

b = "白棋子赢";

}

}

}

System.out.print(qi[i][j]);

}

System.out.println();

}

return b;

}

public static boolean win(char[][] qi, char ch, int row, int col) {

boolean b = false;

boolean ns = n2s(qi, ch, row, col);

boolean we = w2e(qi, ch, row, col);

boolean wnes = wn2es(qi, ch, row, col);

boolean enws = en2ws(qi, ch, row, col);

b = ns || we || wnes || enws;

return b;

}

/* 从北到南方向 */

public static boolean n2s(char[][] qi, char ch, int row, int col) {

boolean win = false;

int north = 0;// begin

int south = 0;// end

while (qi[row][col] == ch) {

row--;

if (row < 0) {

break;

}

}

row++;// row此时要++,不然等到下面的while(..)中的qi[row][col]永不会==ch

north = row;

while (qi[row][col] == ch) {

row++;

if (row > 15) {

break;

}

}

south = row;

if ((south - north) >= 5) {

win = true;

}

return win;

}

/* 从西到东方向 */

public static boolean w2e(char[][] qi, char ch, int row, int col) {

boolean win = false;

int west = 0;// begin

int east = 0;// end

while (qi[row][col] == ch) {

col--;

if (col < 0) {

break;

}

}

col++;// col此时要++,不然等到下面的while(..)中的qi[row][col]永不会==ch

west = col;

while (qi[row][col] == ch) {

col++;

if (col > 15) {

break;

}

}

east = col;

if ((east - west) >= 5) {

win = true;

}

return win;

}

/* 从西北到东南方向 */

public static boolean wn2es(char[][] qi, char ch, int row, int col) {

boolean win = false;

int wn = 0;// begin

int es = 0;// end

while (qi[row][col] == ch) {

row--;

col--;

if (row < 0 || col < 0) {

break;

}

}

row++;// row和col此时要++,不然等到下面的while(..)中的qi[row][col]永不会==ch

col++;

wn = row;

while (qi[row][col] == ch) {

row++;

col++;

if (row > 15 || col > 15) {

break;

}

}

es = row;

if ((es - wn) >= 5) {

win = true;

}

return win;

}

/* 从东北到西南方向 */

public static boolean en2ws(char[][] qi, char ch, int row, int col) {

boolean win = false;

int en = 0;// begin

int ws = 0;// end

while (qi[row][col] == ch) {

row--;

col--;

if (row < 0 || col < 0) {

break;

}

}

row++;// row和col此时要++,不然等到下面的while(..)中的qi[row][col]永不会==ch

col++;

en = row;

while (qi[row][col] == ch) {

row++;

col++;

if (row > 15 || col > 15) {

break;

}

}

ws = row;

if ((ws - en) >= 5) {

win = true;

}

return win;

}

}

如何用c#窗体做五子棋小游戏,求开始的按钮到对应的代码能整个实现

用c#窗体做五子棋小游戏 :
首先是界面设计,控件一共有4个,1个PictureBox ;1个开始按钮,命名为btnStart;1个重置按钮,命名为btnReset;1个文本框Label,用于显示游戏状态;
2. 新建一个MainSize类用于存放界面上的可能用到的参数,主框体大小520*460,棋盘是一个PictureBox控件,大小401*401,棋盘20行20列,每个格子边长20,棋子直径16。
3. 新建一个ChessBoard类表示棋盘,有一个静态函数DrawBoard,函数代码如下:
class ChessBoard{static readonly Color color = Color.Black;static readonly float penWid = 1.0f;static readonly Pen pen = new Pen(color, penWid);public static void DrawCB(Graphics gra,PictureBox pic){//每排数量int horC = MainSize.CBWid / MainSize.CBGap;//间隔int gap = MainSize.CBGap;Image img = new Bitmap(MainSize.CBWid, MainSize.CBHei);gra = Graphics.FromImage(img);gra.Clear(Color.White);gra.DrawRectangle(pen, 0, 0, MainSize.CBWid, MainSize.CBHei);//画棋盘for (int i = 0; i < horC; i++){gra.DrawLine(pen, 0, i * gap, MainSize.CBWid, i * gap);gra.DrawLine(pen, i * gap, 0, i * gap, MainSize.CBHei);}gra.DrawLine(pen, 0, horC * gap, MainSize.CBWid, horC * gap - 1);gra.DrawLine(pen, horC * gap - 1, 0, horC * gap, MainSize.CBHei);pic.Image = img;}}
4. 新建一个基本类Chess,用来表示棋子,有一个静态函数DrawChess,代码如下:
class Chess{ public static void DrawChess(bool type,PictureBox pic,Graphics graphic,MouseEventArgs e)
//bool型变量用于表示下棋的双方
{graphic = pic.CreateGraphics();Pen pen1 = new Pen(Color.Red, 1);Brush bru1 = new SolidBrush(Color.Red);Pen pen2 = new Pen(Color.Blue, 1);Brush bru2 = new SolidBrush(Color.Blue);int newX = (int)((e.X + MainSize.CBGap / 2) / MainSize.CBGap) * MainSize.CBGap - MainSize.ChessRadious / 2;int newY = (int)((e.Y + MainSize.CBGap / 2) / MainSize.CBGap) * MainSize.CBGap - MainSize.ChessRadious / 2;
//pen1和pen2用于绘制双方的棋子,颜色设置为红蓝
if (type){ graphic.DrawEllipse(pen1, newX, newY, MainSize.ChessRadious, MainSize.ChessRadious);graphic.FillEllipse(bru1, newX, newY, MainSize.ChessRadious, MainSize.ChessRadious); }if (!type){ graphic.DrawEllipse(pen2, newX, newY, MainSize.ChessRadious, MainSize.ChessRadious);graphic.FillEllipse(bru2, newX, newY, MainSize.ChessRadious, MainSize.ChessRadious); }
//整型变量nexX和newY用于表示棋子在棋盘上的坐标,根据四舍五入就近原则落点 graphic.Dispose();
}
}
5. 主程序,一共设置了4个全局变量,Graphics graphic用于画图,bool type用于表示下棋双方,bool start表示游戏是否开始,二维数组ChessBack用于模拟下棋场景并进行计算。 主程序的构造函数对主框体和PictureBox的大小进行初始化,在Form1_Load函数中添加函数InitializeThis()对游戏进行初始化,包括将ChessBack数组全部置0,type设为true,start设为false,绘制棋盘,按键开始的Enabled属性设为true,按键重置设为false。 按键开始和重置的功能较为简单,代码如下:
private void btnStart_Click(object sender, EventArgs e){start = true;label1.Text = "游戏开始!";btnStart.Enabled = false;btnReset.Enabled = true;}
private void btnReset_Click(object sender, EventArgs e){ if (MessageBox.Show("确定要重新开始?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes){ InitializeThis();}}
6. picturebox的函数,先判断游戏是否开始,否则不会有反应。游戏开始后点击即可落子,并修改ChessBack矩阵,红色为1,蓝色为2,如果已经有棋子则返回,即落子失败。如果棋盘已满但没有分出胜负则弹出平局的提示框并给出提示。之后判断是否分出胜负,添加函数bool Victory(int bx,int by),分出胜负后提示胜利,如果没有则返回。最后换人,type=!type即可,然后修改label的文字表面到哪一方落子了。代码如下。
private void pictureBox1_MouseClick(object sender, MouseEventArgs e){if (start){//在计算矩阵中的位置int bX = (int)((e.X + MainSize.CBGap / 2) / MainSize.CBGap);int bY = (int)((e.Y + MainSize.CBGap / 2) / MainSize.CBGap);//防止在同一个位置落子if (ChessBack[bX, bY] != 0)return;Chess.DrawChess(type, pictureBox1, graphic, e);ChessBack[bX,bY] = type?1:2;//判断棋盘是否满了if (IsFull() && !Victory(bX,bY)){if (MessageBox.Show("游戏结束,平局") == DialogResult.OK)InitializeThis();return;}//判断胜利if (Victory(bX,bY)){string Vic = type ? "红" : "蓝";if (MessageBox.Show(Vic + "方胜利!") == DialogResult.OK)InitializeThis();return;}//换人type = !type;label1.Text = type ? "红方's trun!" : "蓝方's turn!";}elsereturn;}
7. 判断胜负的函数,先写了一个横向的进行测试,如果横向两端的值与当前值相同则变量count++,最后返回count的值,如果>4则表示胜利。但是这个函数运行出错,显示为stackoverflow,但我不知道错误在哪,只好换一种判断方法。后来才想明白两端的值都是0则会溢出,应该判断两端的值是否为1或2而不是当前值。此处借鉴了实验楼网站上的C语言版五子棋的判断胜负方式,从当前落子的矩阵中,横竖斜4个方向任意一个方向有连续5个数的值与当前的值相同则胜利,实现也不复杂,细分为三个函数实现。代码如下:
#region 判断胜利private bool Victory(int bx,int by){if (HorVic(bx, by))return true;if (VerVic(bx, by))return true;if (Vic45(bx, by))return true;elsereturn false;}private bool Vic45(int bx, int by) { int b1 = (bx - 4) > 0 ? bx - 4 : 0;int b2 = (by - 4) > 0 ? by - 4 : 0;//int buttom = b1 > b2 ? b2 : b1;int val = ChessBack[bx, by];for (int i = b1,j=b2; i < 16&&j<16; i++,j++){if (ChessBack[i, j] == val && ChessBack[i + 1, j + 1] == val &&ChessBack[i + 2, j + 2] == val && ChessBack[i + 3, j + 3] == val&& ChessBack[i + 4, j + 4] == val)return true;}for (int i = b1, j = b2; i < 16 && j < 16; i++, j++){if (ChessBack[i, j] == val && ChessBack[i + 1, j - 1] == val &&ChessBack[i + 2, j - 2] == val && ChessBack[i + 3, j - 3] == val&& ChessBack[i - 4, j - 4] == val)return true;}return false;}private bool VerVic(int bx, int by){int buttom = (by - 4) > 0 ? by - 4 : 0;int val = ChessBack[bx, by];for (int i = buttom; i < 16; i++){if (ChessBack[bx, i] == val && ChessBack[bx, i+1] == val &&ChessBack[bx, i+2] == val && ChessBack[bx ,i+3] == val&& ChessBack[bx, i+4] == val)return true;}return false;}private bool HorVic(int bx, int by){int left = (bx-4)>0?bx-4:0;int val = ChessBack[bx,by];for (int i = left; i < 16; i++){if (ChessBack[i, by] == val && ChessBack[i + 1, by] == val &&ChessBack[i + 2, by] == val && ChessBack[i + 3, by] == val&& ChessBack[i + 4, by] == val)return true;}return false;}#endregion
8 .经过测试,没有问题大功告成
楼主要及时采纳加分哦

阅读更多 >>>  java课程设计五子棋,解释五子棋的java代码

求五子棋C源代码

【五子棋简介】
五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。
五子棋容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
传统五子棋:
传统五子棋的棋子分为黑白两色,采用围棋棋盘,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。
因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。
称谓:
五子棋,日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为“FIR (Five In A Row的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect 5、mo-rphion”。捷克语piskvorky,韩语omok……
许多国家的人对五子棋都有不同的爱称,例如,韩国人把五子棋称为“情侣棋”,暗示情人之间下五子棋有利于增加情感的交流;欧洲人称其为“绅士棋”,代表下五子棋的君子风度胜似绅士;日本人则称其为“中老年棋”,说明五子棋适合中老年人的生理特点和思维方式;美国人喜欢将五子棋称为“商业棋”,也就是说,商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。
起源:
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。可见,五子棋颇有渊源。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。
在古代,五子棋棋具虽然与围棋相类同,但是下法却是完全不同的。正如《辞海》中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。”。
[编辑本段]【五子棋的发展】
日本
据日本史料文献记载,中国古代的五子棋先由中国传到高丽(朝鲜),然后于公元1688年至1704年日本的元禄时代再从高丽传到日本,最初在皇宫和贵族大家庭中流行,到元禄末期,开始在民间盛行。1899年,对传统五子棋进行规则改良后,经过公开征名,“联珠”这一名称才被正式确定下来。取意于“日月如合璧,五星如联珠”。现写做“连珠”。
欧洲
20世纪初传统五子棋及连珠从日本传入欧洲,五子棋称为“Five In A Row”(缩写为FIR),同时根据日语的罗马拼音,“五目、五目碰”称为"Gomoku、Gobang",“连珠”则称之为“Renju”。
1958年以及1979年,瑞典和前苏联分别成立了连珠联盟。1988年,日本、前苏联以及瑞典三个国家的连珠组织在瑞典成立国际连珠联盟(Renju International Federation,简称RIF).
20世纪90年代欧洲一些国家将传统五子棋引入“交换”等规则后,经过发展逐渐形成一系列的Gomoku新规则,中欧一些国家成立了Gomoku组织,并和六子棋共同成立了国际联盟(GCIF)。
21世纪初在举办世界连珠(renju)锦标赛的同时也举办世界Gomoku锦标赛(GT)及六子棋国际公开赛(CT)。
2009年8月在捷克共和国(CzechRepublic)帕尔杜比采市(Pardubice)将举行第11届世界连珠锦标赛和第3届世界Gomoku锦标赛。
中国
长久以来五子棋在中国一直没有得到发展。
2001年,国家体育总局批准中国棋院试办全国性五子棋比赛。
2002年8月2-4日,中国棋院举办了首届全国五子棋个人邀请赛,此后每年举办一次。
2003年,国家体育总局批准了中国棋院审定的《中国五子棋竞赛规则》(试行)(参考资料[1])和《中国五子棋段级位制》(试行)(参考资料[2])。
2006年2月,国家体育总局对五子棋正式立项,作为围棋下的一个二级项目。全国各地相继成立了新的五子棋俱乐部。
2007年5月和10月中国棋院先后举办了首届全国五子棋团体锦标赛和首届全国五子棋个人锦标赛。
2008年6月和12月中国棋院先后举办了第二届全国五子棋团体锦标赛和第二届全国五子棋个人锦标赛。
2009年5月28-30日中国棋院举办了第三届全国五子棋团体锦标赛。
2009年11月,首届全国智力运动会将五子棋作为的正式比赛项目(参考资料[3])。
[编辑本段]【现代五子棋】
随着五子棋的发展,逐步发现先手优势非常大,最后得出“先手必胜”。五子棋要成为竞技运动,核心问题是怎样解决传统五子棋下法中“先手必胜”的问题。
“交换”思维
“交换”思维有个形象的比喻:一个人切蛋糕,一个人选蛋糕。即:一人开局,另一人选择黑方还是白方。此方法最为公平、最有效率,且最为简洁实用。不过此方法使开局者不走已知的必胜,把棋艺的较量演化为对局者开局的博弈,而“先手必胜”依然存在。
如:欧洲的Swap2、Swap1;中国的Swap3、第一手交换规则等。
“禁手”思维
禁止以某种手段取胜。为了平衡先后手之间的差距,削弱先手优势,日本连珠提出“禁手”。后来连珠的发展证明禁手并不能平衡先后手之间的差距,依然是“先手必胜”。
“泡沫”原理
像泡沫一样会破灭。如“吃子”五子棋。连成5个后消失,同时拿掉对方一个棋子,自己再补一子。此原理的的特点是:把五子棋金球制改成了“进球制”,同时也最大效率地利用了棋盘和棋子,带来了全新的思维。问题是怎样计算胜负。
“井字游戏”原理
井字游戏又叫圈叉棋,圈叉棋是和棋,原因是空间很小。
通过缩小棋盘来抑制五子棋先手的优势。如:15路棋盘,13路棋盘等等。问题是多大的棋盘才能是和棋,知道和棋后还能成为竞技运动吗。
“跷跷板”原理
五子棋始终是先手领先一子。如果双方轮流领先一子呢?
台湾教授发明的六子棋,就如“跷跷板”一样。先手先下一子,然后双方轮流下两子,先连成6子者胜利。六子棋为第11届奥林匹亚计算机游戏程序竞赛项目,验证其公平性与复杂性。
综合效应
“禁手”思维+“交换”思维+“井字游戏”原理=连珠
如:RIF规则、Sakata规则、Yamaguchi规则Tarannikov规则等。

现代五子棋的现状
五子棋、六子棋、连珠已经成为欧洲现代五子棋的组成部分,举行了很多次大大小小的比赛,并且将三种棋的世界锦标赛联合举行。
中国的现代五子棋还处于起步阶段。2003年中国棋院《中国五子棋竞赛规则》参考了RIF规则,同时兼顾发展传统五子棋。
[编辑本段]【五子棋段级位制】
中国五子棋段级位制 (试行) (具体内容见参考资料[2])
五子棋的段级位对象:参加中国棋院认可的国内外五子棋比赛的五子棋爱好者。
第四条 段位共分九个等级,最高是九段,以下分别是八段、七段、六段、五段、四段、三段、二段、初段。段位以下共分十个等级,最高是一级,以下分别是二级、三级、四级、五级、六级、七级、八级、九级、十级。
第五条 根据中国五子棋爱好者在国内、国际交流中所体现出来的实际水平,在五子棋段级位制度实施初期,对爱好者授予的最高段位暂定为六段。随着中国棋手参与国内外交流机会的增加和技术水平的提高,逐步增加所授予段位的上限,直至九段。
[编辑本段]【棋盘、棋子与记谱方法】
相传中华民族的祖先轩辕黄帝无意之中画下了十七条横线十条竖线,这无意中的发明造就出了五子棋。早在公元595年古人就用瓷来烧制五子棋盘了。千百年来,人们用各种材质来制造围棋的棋子,如:玻璃、瓷器、玉、玛瑙、铜等等。
古代五子棋棋盘与围棋棋盘是通用的,汉魏时为十七路(17×17)棋盘,至南北朝时即已流行十九路(19×19)棋盘,直至1931年,才出现所谓五子棋专用棋盘,如图所示,为十五路(15×15)棋盘,形状近于正方形,平面上画横竖各15条平行线,线路为黑色,构成225个交叉点,邻近两个交点的距离纵线约为2.5厘米,横线约为2.4厘米。棋盘正中一点为“天元”。棋盘两端的横线称端线,棋盘左右最外边的两条纵线称边线。从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。天元和星应在棋盘上用直径约为0.5厘米的实心小圆点标出。
五子棋棋子亦称“棋石”分黑、白两色,形状为扁圆形,有一面凸起或两面凸起等形状,厚度不超过0.8厘米,直径为2.0~2.3厘米;一副棋子总数为225枚,其中黑子113枚,白子112枚。按质地的不同,可分为玻璃、陶瓷、塑料、智石、磁铁、蛤贝、烧料、水晶、玛瑙、玉石等棋子。
五子棋正规的记谱方法为用“五子棋稿纸”,即专供五子棋爱好者记录对局或着法的稿纸。其上印有正规专用棋盘图形,记录时只要按相应位置在纸上标明行棋的先后,即可反映对局的进行过程。非正规的记谱方法为用格子纸记录,即用单数1、3、5等记录黑方的走法,用双数2、4、6记录白方的走法,同样可反映对局的进行过程。另外还有北京京都五子棋协会为了推广盲人下五子棋,以及正常人下盲棋并背诵五子棋棋谱,专门设计的盲棋记谱法等。
[编辑本段]【相关术语】
【对局相关术语】
〖黑方〗执黑棋一方的简称。
〖白方〗执白棋一方的简称。
〖胜局〗有一方获胜的对局。
〖和局〗分不出胜负的对局。
〖终局〗对局结束。
〖复盘〗对局双方将本盘对局全过程的再现。
【行棋相关术语】
〖阳线〗即:直线,棋盘上可见的横纵直线。
〖交叉点〗阳线垂直相交的点,简称“点”。
〖阴线〗即:斜线,由交叉点构成的与阳线成45°夹角的隐形斜线。
〖落子〗棋子直接落于棋盘的空白交叉点上。
〖轮走方〗即“行棋方”,有权利落子的黑方或白方。
〖着〗在对局过程中,行棋方把棋子落在棋盘无子的点上,不论落子的手是否脱离棋子,均被视为一着。
〖回合〗双方各走一着,称为一个回合。
〖开局〗在对局开始阶段形成的布局。
〖连〗同色棋子在一条阳线或阴线上相邻成一排。
〖长连〗五枚以上同色棋子在一条阳线或阴线上相邻成一排。
〖五连〗只有五枚同色棋子在一条阳线或阴线上相邻成一排。
〖成五〗含有五枚同色棋子所形成的连,包括五连和长连。
〖四〗在一条阳线或阴线上连续相邻的5个点上只有四枚同色棋子的棋型。
〖活四〗有两个点可以成五的四。
〖冲四〗只有一个点可以成五的四。
〖死四〗不能成五的四。
〖三〗在一条阳线或阴线上连续相邻的5个点上只有三枚同色棋子的棋型。
〖活三〗再走一着可以形成活四的三。
〖连活三〗即:连的活三(同色棋子在一条阳线或阴线上相邻成一排的活三)。简称“连三”。
〖跳活三〗中间隔有一个空点的活三。简称“跳三”。
〖眠三〗再走一着可以形成冲四的三。
〖死三〗不能成五的三。
〖二〗在一条阳线或阴线上连续相邻的5个点上只有两枚同色棋子的棋型。
〖活二〗再走一着可以形成活三的二。
〖连活二〗即:连的活二(同色棋子在一条阳线或阴线上相邻成一排的活二)。简称“连二”。
〖跳活二〗中间隔有一个空点的活二。简称“跳二”。
〖大跳活二〗中间隔有两个空点的活二。简称“大跳二”。
〖眠二〗再走一着可以形成眠三的二。
〖死二〗不能成五的二。
〖先手〗对方必须应答的着法,相对于先手而言,冲四称为“绝对先手”。
〖三三〗一子落下同时形成两个活三。也称“双三”。
〖四四〗一子落下同时形成两个冲四。也称“双四”。
〖四三〗一子落下同时形成一个冲四和一个活三。
【战术相关术语】
〖风车轮〗指在一定区域内来回地绕着连续进攻的战术或技巧,就像一个风车轮一直在转着似的,这样的取胜方法也称之为“风车胜”。
〖二头蛇〗指某一方以活三进攻时,无论对方防守于哪一头都难免被蛇头咬伤,因为此时的活三如同二头蛇一样,两头都有厉害的杀着。也称“两头蛇”。
〖一子双杀〗一子落下同时形成两种取胜方法而对方无法同时防守的取胜技巧。
〖一子多杀〗一子落下同时形成两种以上取胜方法而对方无法同时防守的取胜技巧。
〖一子双防〗一子落下同时形成防守两种取胜方法的防守技巧。
〖八卦阵〗以“日”字的一组对角点为棋型,互为马步的防守阵型。构成五子棋八卦阵。
〖VCF〗英文 Victory of Continuous Four 的字头缩写,是利用连续不断地冲四这种绝对先手,直至最终取得胜利的战术技巧。
〖VCT〗英文 Victory of Continuous Threat 的字头缩写,是利用连续不断地活三、冲四、做杀等先手,直至最终取得胜利的战术技巧。
【比赛相关术语】
〖个人赛〗计算个人成绩的比赛。
〖团体赛〗计算运动队团体成绩的比赛。
〖轮空〗赛制中部分选手直接从中间某轮开始参加比赛,某轮未比赛的安排就叫轮空。
〖节〗一个比较集中的比赛单位时间(如一个上午或一个下午或一个晚上)称一“节”。
〖轮〗参赛的各队(团体赛)或各名棋手(个人赛)普遍出场比赛一次(个别轮空者除外)称一“轮”。
〖次〗团体赛中的同一轮两队之间完成的比赛称为一“次”比赛。
〖场〗两名棋手之间完成的两局制或多局制的一次比赛称为一“场”比赛。
〖局〗两名棋手之间完成的一盘比赛称为一“局”比赛。
[编辑本段]【那氏五子兵法】
中国现代五子棋的开拓者那威荣誉九段,多年钻研五子棋,潜心发掘五子棋的中国民间阵法,他总结了五子棋行棋的要领和临阵对局的经验,得出一套“ 秘诀 ” ,谓之《那氏五子兵法》:
先手要攻,后手要守,以攻为守,以守待攻。
攻守转换,慎思变化,先行争夺,地破天惊。
守取外势,攻聚内力,八卦易守,成角易攻。
阻断分隔,稳如泰山,不思争先,胜如登天。
初盘争二,终局抢三,留三不冲,变化万千。
多个先手,细算次先,五子要点,次序在前。
斜线为阴,直线为阳,阴阳结合,防不胜防。
连三连四,易见为明,跳三跳四,暗剑深藏。
己落一子,敌增一兵,攻其要点,守其必争。
势已形成,败即降临,五子精华,一子输赢。
[编辑本段]【五子棋的开局】
五子棋的开局也称布局,一般在3~7手左右完成。五子棋的开局是十分重要的。一般情况下,一局五子棋的着数在20至40着之间,因此,它的开局阶段是非常短暂的,大约在七八着至十几着之间。在这一阶段的争夺中,双方的布局、应答将对以后的胜负起着关键的作用。一般来说,黑棋以攻为主,而白棋则以防为主。
在开局阶段,双方主要是二的争夺。双方必须设法创造自己的连二、活二、跳二或大跳二等,同时要阻挡对方的活二。无论哪种开局,均体现出这一规律。
可以说,哪一方的二做得多 ( 有两个以上的活二 ) ,或者有效地阻挡住对方的活二,那么,哪一方的胜率就比较大。另外,开局时每一个次序、每一种节奏都不能忽视,输赢就在一步之差。
直止打法开局为了便于记忆、区分以及比赛。只对前3步组成的棋形进行了部分取名。
中国五子棋竞赛规则的五子棋开局
开局形状均以“星”和“月”命名。(参考资料[1]中“第三条”)
斜止打法开局全国正式比赛均采用26种开局,包括斜指开局的长星局、峡月局、恒星局、水月局、流星局、云月局、浦月局、岚月局、银月局、明星局、斜月局、名月局、慧星局和直指开局的寒星局、溪月局、疏星局、花月局、残月局、雨月局、金星局、松月局、丘月局、新月局、瑞星局、山月局、游星局。
黑方必负开局
可用《彭氏口诀》进行记忆:
二十六局先弃二,直指游星斜慧星。
寒星溪月疏星首,花残二月并白莲,
雨月金星追黑玉,松丘新宵瑞山腥。
星月长峡恒水流,白莲垂俏云浦岚,
黑玉银月倚明星,斜月名月堪称朋。
[编辑本段]【五子棋的数学思考】

可能很少有人注意到,五子连珠游戏其中包含着一个极为深刻的数学问题。为什么不是四子连珠,或者是六子连珠?你可能会说,四子连珠,那就太容易啦,下几步就胜了。而六子连珠呢,则太难了,谁也别想连成。这就说明,五子连珠极可能是一个最佳攻守平衡值,一个达成连珠的最大值。增一子、减一子都会打破这个平衡。四子连珠太易,攻方处于绝对优势;而六子连珠太难,守方处于绝对优势。而游戏规则必须是让游戏双方处于平等的位置才可能进行,否则游戏就不成其为游戏。要想黑白棋连珠成为一种符合游戏规则的智力游戏,五子连珠无疑是一个最佳方案。中华民族的祖先在发明五子连珠的过程中,猜想肯定也不是一撮而就,而是极可能经历了四子连珠、六子连珠的尝试过程,最后才确定为五子连珠,并流行开来。
这个问题,被当代科普作家傅小松称之为五子连珠问题,又称五子连珠猜想。其准确表述是:
在以横线、竖线互相交叉(一般各为15条)的方形平面(棋盘)中,黑白两种“点’(棋子)先后沿横线、竖线排列(行棋),在平面(棋盘)横线、竖线、斜线(无实线连接)上形成连续的同色“点”(棋子),五个“点”(棋子)为可能达成连珠的最大值。
五子连珠是黑白棋连珠的一个最佳方案,这在实际中早已不会有人怀疑。并且,五子连珠已经存在并发展了几千年,成为了一种趣味性强,同时技巧比较复杂、竞争激烈的棋类游戏,与围棋、国际象棋、中国象棋的巧妙性、复杂性也有一拼。这似乎足以证明五子连珠的最佳性。但从科学真理的角度看,一万次实践的证明也不能代替逻辑和数学上的证明。要确定五子连珠是黑白棋连珠的一个最佳方案,五子连珠是一个最佳值、最大值,必须进行数学上的证明。
“五子连珠问题”的证明可能非常复杂,这是因为,第一,它不是一个静态的问题,而是一个动态的问题。棋盘是一个静态的二维平面,但行棋博弈是一个的动态的过程。第二,这不是一个线性和确定性问题的,而是一个非线性和模糊性问题。所谓“五子连珠”的最佳值,是在千变万化的攻与防中达到的一种默契。因此,要解决“五子连珠猜想”,可能要运用到博弈论、模糊数学等工具。
[编辑本段]五子棋攻防策略
五子棋源于中国,后传入日本名为“连珠”。学从中国,传至中国。
下五子棋须得法,法中变化有莫测;五子之变如水势,因势避高而趋下.战不过攻守,法不过奇正,奇正之法:往复循环,“不竭如江海,无穷如天地”。
其祥法如下 :围、击虚、就实、寡众
(围)由于五子棋源于围棋,故下五子棋若想立于不败之地,须以围棋之法行棋,说白了就是“包饺子”,试想:如果对方的棋子被围住了,左冲右突都不行,前闯后退更不见效,此时他心理极度郁闷,已无斗志,棋还能下好吗?只能是输的份了!!!此招用于防守。
(击虚)兵法有云:“避实击虚”,下五子棋之精髓也在其理。不过此举贵在进攻,进攻若能攻其空虚之处,且得法,将会以迅雷不及掩耳之势而破竹将对手击败。此招用于进攻。
(就实)老子《道德经》中讲了万物正反两个方面及消长之理,攻守亦不过如此,故有“避实击虚”则就有“就实让虚”。“就实让虚”就是对方往哪里走棋,咱就往哪里走棋,好比随形附影一般。这招要把握好火候,不能过度也不能失度,因为下棋很容易攻守易势(攻之极乃守时,守之极乃攻时;攻中生守,守中生攻),此招用于防守。
(寡众)《孙子●虚实》中曰:“......备前则后寡,备后则前寡,备左则右寡,备右则左寡,无所不备,则无所不寡......”此招用在五子棋中则反其道而行,则会收到意想不到的效果,具体招法是“堵了前面则堵后面,堵了后面则堵前面,堵了左边则堵右边,堵了右边则堵左边”,前后左右四面八方都堵,则对方则无路可逃,无棋可下!此招和(围)连用。无所不胜,用在防守。
另外,有时在有计算的前提下,连续冲三、冲四(vct、vcf)有可能创造新的进攻机会;反之,一味的VC,只能迟滞败亡的步伐,反而使自己被“围”陷入铁桶阵(一般叫马桶阵)中。除了这些外,八卦阵是防守的无二秘宝,只是明八卦太过明显,因此暗八卦(用部分八卦点做主力,少量杂子作障眼)的功底就成了衡量技术的重要指标。
参考【棋经十三篇】
【五子棋贡献分析法】
五子棋作为民间游戏来说,也是颇有智力韵味的,下面介绍一下理论中的五子棋的贡献问题与法则:
设以围棋棋盘左下角为坐标原点建立直角坐标系xOy,若(9,10)(9,11)(10,10)(11,9)上有黑子,(8,12)(10,9)(11,8)上有白子,现在到白棋走子,若走(10,12)(11,11)就属于斜向走子,但是通常直向的(紧贴着棋子走的)走子要比斜向的走子对防守的贡献大,若走(8,11)(8,10)(8,9)(9,9)其中一个的均属于单侧走子,而另一侧则空虚,所以也不好,若走(11,10)也不好,因为在(11,8)的子已经对防守有了一定的贡献了,同理走(10,11)的也不好,因为(10,9)的子也对防守有了一定的贡献.所以说此时最佳的走子方法就是走(9,12)
若(8,10)有白子,(10,10)(11,10)(12,10)有黑子,到白子走,由于(8,10)对防守贡献了一部分,所以应该走(13,10)而不走(9,10)。若为黑走,就应该走(13,10)而不走(9,10),因为白子的(8,10)会削弱它对攻的贡献
  这个是稍微好一点的了,以前没事试过
  /*
  五子棋
  */
  #include

  #include

  #include

  #include

  #include

  #define LEFT 0x4b00

  #define RIGHT 0x4d00

  #define DOWN 0x5000

  #define UP 0x4800

  #define ESC 0x011b

  #define SPACE 0x3920

  #define BILI 20

  #define JZ 4

  #define JS 3

  #define N 19

  int box[N][N];

  int step_x,step_y ;

  int key ;

  int flag=1 ;

  void draw_box();

  void draw_cicle(int x,int y,int color);

  void change();

  void judgewho(int x,int y);

  void judgekey();

  int judgeresult(int x,int y);

  void attentoin();

  void attention()

  {

  char ch ;

  window(1,1,80,25);

  textbackground(LIGHTBLUE);

  textcolor(YELLOW);

  clrscr();

  gotoxy(15,2);

  printf("游戏操作规则:");

  gotoxy(15,4);

  printf("Play Rules:");

  gotoxy(15,6);

  printf("1、按左右上下方向键移动棋子");

  gotoxy(15,8);

  printf("1. Press Left,Right,Up,Down Key to move Piece");

  gotoxy(15,10);

  printf("2、按空格确定落棋子");

  gotoxy(15,12);

  printf("2. Press Space to place the Piece");

  gotoxy(15,14);

  printf("3、禁止在棋盘外按空格");

  gotoxy(15,16);

  printf("3. DO NOT press Space outside of the chessboard");

  gotoxy(15,18);

  printf("你是否接受上述的游戏规则(Y/N)");

  gotoxy(15,20);

  printf("Do you accept the above Playing Rules? [Y/N]:");

  while(1)

  {

  gotoxy(60,20);

  ch=getche();

  if(ch=='Y'||ch=='y')

  break ;

  else if(ch=='N'||ch=='n')

  {

  window(1,1,80,25);

  textbackground(BLACK);

  textcolor(LIGHTGRAY);

  clrscr();

  exit(0);

  }

  gotoxy(51,12);

  printf(" ");

  }

  }

  void draw_box()

  {

  int x1,x2,y1,y2 ;

  setbkcolor(LIGHTBLUE);

  setcolor(YELLOW);

  gotoxy(7,2);

  printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.");

  for(x1=1,y1=1,y2=18;x1<=18;x1++)

  line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);

  for(x1=1,y1=1,x2=18;y1<=18;y1++)

  line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);

  for(x1=1;x1<=18;x1++)

  for(y1=1;y1<=18;y1++)

  box[x1][y1]=0 ;

  }

  void draw_circle(int x,int y,int color)

  {

  setcolor(color);

  setlinestyle(SOLID_LINE,0,1);

  x=(x+JZ)*BILI ;

  y=(y+JS)*BILI ;

  circle(x,y,8);

  }

  void judgekey()

  {

  int i ;

  int j ;

  switch(key)

  {

  case LEFT :

  if(step_x-1<0)

  break ;

  else

  {

  for(i=step_x-1,j=step_y;i>=1;i--)

  if(box[i][j]==0)

  {

  draw_circle(step_x,step_y,LIGHTBLUE);

  break ;

  }

  if(i<1)break ;

  step_x=i ;

  judgewho(step_x,step_y);

  break ;

  }

  case RIGHT :

  if(step_x+1>18)

  break ;

  else

  {

  for(i=step_x+1,j=step_y;i<=18;i++)

  if(box[i][j]==0)

  {

  draw_circle(step_x,step_y,LIGHTBLUE);

  break ;

  }

  if(i>18)break ;

  step_x=i ;

  judgewho(step_x,step_y);

  break ;

  }

  case DOWN :

  if((step_y+1)>18)

  break ;

  else

  {

  for(i=step_x,j=step_y+1;j<=18;j++)

  if(box[i][j]==0)

  {

  draw_circle(step_x,step_y,LIGHTBLUE);

  break ;

  }

  if(j>18)break ;

  step_y=j ;

  judgewho(step_x,step_y);

  break ;

  }

  case UP :

  if((step_y-1)<0)

  break ;

  else

  {

  for(i=step_x,j=step_y-1;j>=1;j--)

  if(box[i][j]==0)

  {

  draw_circle(step_x,step_y,LIGHTBLUE);

  break ;

  }

  if(j<1)break ;

  step_y=j ;

  judgewho(step_x,step_y);

  break ;

  }

  case ESC :

  break ;

  case SPACE :

  if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)

  {

  if(box[step_x][step_y]==0)

  {

  box[step_x][step_y]=flag ;

  if(judgeresult(step_x,step_y)==1)

  {

  sound(1000);

  delay(1000);

  nosound();

  gotoxy(30,4);

  if(flag==1)

  {

  setbkcolor(BLUE);

  cleardevice();

  setviewport(100,100,540,380,1);

  /*定义一个图形窗口*/

  setfillstyle(1,2);

  /*绿色以实填充*/

  setcolor(YELLOW);

  rectangle(0,0,439,279);

  floodfill(50,50,14);

  setcolor(12);

  settextstyle(1,0,5);

  /*三重笔划字体, 水平放?5倍*/

  outtextxy(20,20,"The White Win !");

  setcolor(15);

  settextstyle(3,0,5);

  /*无衬笔划字体, 水平放大5倍*/

  outtextxy(120,120,"The White Win !");

  setcolor(14);

  settextstyle(2,0,8);

  getch();

  closegraph();

  exit(0);

  }

  if(flag==2)

  {

  setbkcolor(BLUE);

  cleardevice();

  setviewport(100,100,540,380,1);

  /*定义一个图形窗口*/

  setfillstyle(1,2);

  /*绿色以实填充*/

  setcolor(YELLOW);

  rectangle(0,0,439,279);

  floodfill(50,50,14);

  setcolor(12);

  settextstyle(1,0,8);

  /*三重笔划字体, 水平放大8倍*/

  outtextxy(20,20,"The Red Win !");

  setcolor(15);

  settextstyle(3,0,5);

  /*无衬笔划字体, 水平放大5倍*/

  outtextxy(120,120,"The Red Win !");

  setcolor(14);

  settextstyle(2,0,8);

  getch();

  closegraph();

  exit(0);

  }

  }

  change();

  break ;

  }

  }

  else

  break ;

  }

  }

  void change()

  {

  if(flag==1)

  flag=2 ;

  else

  flag=1 ;

  }

  void judgewho(int x,int y)

  {

  if(flag==1)

  draw_circle(x,y,15);

  if(flag==2)

  draw_circle(x,y,4);

  }

  int judgeresult(int x,int y)

  {

  int j,k,n1,n2 ;

  while(1)

  {

  n1=0 ;

  n2=0 ;

  /*水平向左数*/

  for(j=x,k=y;j>=1;j--)

  {

  if(box[j][k]==flag)

  n1++;

  else

  break ;

  }

  /*水平向右数*/

  for(j=x,k=y;j<=18;j++)

  {

  if(box[j][k]==flag)

  n2++;

  else

  break ;

  }

  if(n1+n2-1>=5)

  {

  return(1);

  break ;

  }

  /*垂直向上数*/

  n1=0 ;

  n2=0 ;

  for(j=x,k=y;k>=1;k--)

  {

  if(box[j][k]==flag)

  n1++;

  else

  break ;

  }

  /*垂直向下数*/

  for(j=x,k=y;k<=18;k++)

  {

  if(box[j][k]==flag)

  n2++;

  else

  break ;

  }

  if(n1+n2-1>=5)

  {

  return(1);

  break ;

  }

  /*向左上方数*/

  n1=0 ;

  n2=0 ;

  for(j=x,k=y;j>=1,k>=1;j--,k--)

  {

  if(box[j][k]==flag)

  n1++;

  else

  break ;

  }

  /*向右下方数*/

  for(j=x,k=y;j<=18,k<=18;j++,k++)

  {

  if(box[j][k]==flag)

  n2++;

  else

  break ;

  }

  if(n1+n2-1>=5)

  {

  return(1);

  break ;

  }

  /*向右上方数*/

  n1=0 ;

  n2=0 ;

  for(j=x,k=y;j<=18,k>=1;j++,k--)

  {

  if(box[j][k]==flag)

  n1++;

  else

  break ;

  }

  /*向左下方数*/

  for(j=x,k=y;j>=1,k<=18;j--,k++)

  {

  if(box[j][k]==flag)

  n2++;

  else

  break ;

  }

  if(n1+n2-1>=5)

  {

  return(1);

  break ;

  }

  return(0);

  break ;

  }

  }

  void main()

  {

  int gdriver=VGA,gmode=VGAHI;

  clrscr();

  attention();

  initgraph(&gdriver,&gmode,"c:\\tc");

  /* setwritemode(XOR_PUT);*/

  flag=1 ;

  draw_box();

  do

  {

  step_x=0 ;

  step_y=0 ;

  /*draw_circle(step_x,step_y,8); */

  judgewho(step_x-1,step_y-1);

  do

  {

  while(bioskey(1)==0);

  key=bioskey(0);

  judgekey();

  }

  while(key!=SPACE&&key!=ESC);

  }

  while(key!=ESC);

  closegraph();

  }

  

网站数据信息

"简单python五子棋代码,如何用c#窗体做五子棋小游戏,求开始的按钮到对应的代码能整个实现"浏览人数已经达到17次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:简单python五子棋代码,如何用c#窗体做五子棋小游戏,求开始的按钮到对应的代码能整个实现的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!