您当前的位置:首页资讯小游戏正文

五子棋小游戏游戏介绍,怎么玩?

放大字体  缩小字体 发布日期:2019-03-27 06:53:52 来源:惊鸿信息网 浏览次数:242
关于五子棋小游戏游戏介绍,怎么玩?内容

目录

1、如何用c#窗体做五子棋小游戏,求开始的按钮到对应的代码能整个实现
2、请用PYTHON编一个小游戏,如五子棋,连连看,贪吃蛇,扫雷,计算器等等
3、JAVA小游戏五子棋中想加入一个倒计时器,每回合玩家有20秒下棋时间,求如何实现?
4、五子棋的游戏规则是什么
5、五子棋规则
6、有好玩的单机的五子棋游戏么
7、用eclipse开发一个五子棋的小游戏,现在在layout里添加了一个重新开始的按钮,求按钮的代码
8、五子棋游戏有多少人需要
9、用js写一个五子棋的小游戏,其中的悔棋功能怎么实现

 

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


用c#窗体做五子棋小游戏:

  1. 首先是界面设计,控件一共有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!";
}
else
return;
}

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;
else
return 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 .经过测试,没有问题大功告成

楼主要及时采纳加分哦



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


#!/usr/bin/python
from Tkinter import *
import random
class 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("<KeyRelease>", 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 = 4
app = snake()
app.master.title("Greedy Snake")
app.mainloop()

贪食蛇


 

3、JAVA小游戏五子棋中想加入一个倒计时器,每回合玩家有20秒下棋时间,求如何实现?


用线程间隔1s
privateThreadplayerThread;//玩家时间所对应的线程
privateThreadrobotThread;//机器人时间所对应的线程
privateintplayerTime=1800;//玩家的总时间30*60,30分钟

//初始化-玩家时间所对应的线程
playerThread=newThread(newRunnable(){
publicvoidrun(){//相执行start方法时该线程启动
while(true){
try{
playerThread.sleep(1000);//线程睡一秒钟
}catch(Exceptione){
e.printStackTrace();
}

playerTime--;//玩家时间减一秒钟
canvas.repaint();//绘制窗囗
if(playerTime==0){//如果玩家的时间用完了,表示玩家输
isGameBegin=false;//游戏没有开始
isGameOver=true;//游戏结束
canvas.repaint();//绘制窗囗
JOptionPane.showMessageDialog(null,"机器人赢了!");
}
}
}
}
});

 

4、五子棋的游戏规则是什么


规则
(1)对局双方各执一色棋子。
(2)空棋盘开局。
(3)黑先、白后,交替下子,每次只能下一子。
(4)棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。
(5)黑方的第一枚棋子可下在棋盘任意交叉点上。
(6)轮流下子是双方的权利,但允许任何一方放弃下子权(即:PASS权)
五子棋对局,执行黑方指定开局、三手可交换、五手两打的规定。整个对局过程中黑方有禁手,白方无禁手。黑方禁手有三三禁手、四四禁手和长连禁手三种。

连珠五子棋的一个特点是先行的一方优势很大,因此在职业比赛中对黑方做了种种
限制,以利公平竞争。五子棋的比赛规则如下:
〖1〗 黑先、白后,从天元开始相互顺序落子;
〖2〗 最先在棋盘横向、纵向或斜向形成连续的同色五个棋子的一方为胜;
〖3〗 黑棋禁手判负、白棋无禁手。黑棋禁手有“三、三”、“四、四”和“长连”,
包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取胜;
〖4〗 如分不出胜负,则到为平局;
〖5〗 五连与禁手同时形成,判胜;
〖6〗 黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指出,反而
继续落子,则禁手失效,不再判黑方负。
 

5、五子棋规则


(1)对局双方各执一色棋子。

(2)空棋盘开局。

(3)黑先、白后,交替下子,每次只能下一子。

(4)棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。

(5)黑方的第一枚棋子可下在棋盘任意交叉点上。

(6)轮流下子是双方的权利,但允许任何一方放弃下子权(即:PASS权)

五子棋对局,执行黑方指定开局、三手可交换、五手两打的规定。整个对局过程中黑方有禁手,白方无禁手。黑方禁手有三三禁手、四四禁手和长连禁手三种。

扩展资料

1,五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。

2,棋具与围棋通用,起源于中国上古时代的传统黑白棋种之一。主要流行于华人和汉字文化圈的国家以及欧美一些地区,是世界上最古老的棋。

3,容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。已在各个游戏平台有应用。

参考资料百度百科;五子棋


 

6、有好玩的单机的五子棋游戏么


五子棋游戏可以说“在线五子棋小游戏 - aTool在线工具”比较好玩。虽然是和电脑对弈,但也有赢的机率。里面还有其他好玩的游戏,无需下载,十分方便。
 

7、用eclipse开发一个五子棋的小游戏,现在在layout里添加了一个重新开始的按钮,求按钮的代码


//运行代码很简单:在eclipse的项目中新建一个类Five.java把下面的代码放入该类即可//游戏运行:上下左右键控制方向,enter键确定棋子落定之处,黑白交替执行importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassFiveextendsKeyAdapter{ booleanstart=false; Jframeframe; ThreadtimerThread; inth,l;//定义变量 intpans[][]=newint[11][11];//变量初始值 intgbx=5; intgby=5; intziShu=0; intshui=0; Five(){ frame=newJframe("五子棋"); frame.getContentPane().add(newScreen()); frame.addKeyListener(this); frame.setSize(12*40+5*2,12*40+22+5*2+100);//窗口大小 frame.setVisible(true); frame.repaint(); frame.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } });//关闭窗体 } publicvoidkeyPressed(KeyEventevt){ switch(evt.getKeyCode()){ caseKeyEvent.VK_ENTER: if(ziShu%2==0)//子数来判断谁赢 { heiXia(); }else{ baiXia(); } shui=shuiYing(); break; caseKeyEvent.VK_ESCAPE: System.exit(1); break; caseKeyEvent.VK_LEFT: guangBiaoDong(-1,0);//光标动的坐标 break; caseKeyEvent.VK_RIGHT: guangBiaoDong(1,0);//光标动的坐标 break; caseKeyEvent.VK_DOWN: guangBiaoDong(0,1);//光标动的坐标 break; caseKeyEvent.VK_UP: guangBiaoDong(0,-1);//光标动的坐标 break; } frame.repaint();}@SuppressWarnings("serial")classScreenextendsJComponent{ publicvoidpaint(Graphicsg){ Graphics2Dg2d=(Graphics2D)g; xianShi(g2d);//画图 }}publicstaticvoidmain(String[]args){ newFive();} voidxianShi(Graphics2Dg2d)//显示 { xianShiQiPan(g2d);//显示棋盘 xianShiQiZis(g2d);//显示旗子 xianShiGuangBiao(g2d);//显示光标 g2d.setFont(newFont("STXingkai",1,30));//0708第二小组 g2d.setColor(Color.black); g2d.drawString("欢乐五子棋Java版",280,580); g2d.setFont(newFont("stCaiyun",1,40)); if(shui==0)//判断 { g2d.setColor(Color.black); xianShiTiShiXia(g2d);//显示谁下棋 }else{ g2d.setColor(Color.black); xianShiTiShiYing(g2d);//显示谁赢棋 } } voidguangBiaoDong(intfangX,intfangY)////光标动 { if(gbx+fangX>10||gbx+fangX10||gby+fangY=0&&kanx+fx=0&&kany+fy=0&&kanx-fx=0&&kany-fy=5?pans[gby][gbx]:0); }};运行结果:
 

8、五子棋游戏有多少人需要


五子棋最少两个人玩儿,最多四个人玩儿,是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。
棋具与围棋通用,起源于中国上古时代的传统黑白棋种之一。主要流行于华人和汉字文化圈的国家以及欧美一些地区,是世界上最古老的棋。
容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。已在各个游戏平台有应用。
 

9、用js写一个五子棋的小游戏,其中的悔棋功能怎么实现


给你个思路,隐藏一个标签,标签记录每一步的过程,悔棋的话就自动开始重新跑一遍下棋过程走到上一步停止

关键词: 小游戏

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!