cb怎么python实现五子棋棋落子

用C语言编写一个五子棋的游戏程序_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
用C语言编写一个五子棋的游戏程序
《人与机对下》
的功能。要求:1、要有棋盘;2、设计输、赢判断规则函数;3、给出下棋过程急求,哪位大神给解答下
只要人机对下的就行,不用人人对下
我有更好的答案
假为0 */#define TRUE
1#define FALSE
0/*光标移动键*/#define CHESSNULL
//* 程序中用到的库函数所在头文件应用 #include 命令包含进来 *&#47: 真, 假 --- 真为1;X'//int
GetKey(void);S&#39, 可按 Esc 键*/#define ESCAPE
0x011b&#47,struct point Cursor);void DoError(void);void DoOK(void);#define PLAY1UP
0x1157/*上移--'W'*/#define PLAY1DOWN
0x1f53/#define CROSSLD
/*左下角点*//*若有棋子, 还应能指出是哪个玩家的棋子
*/* 定义数据结构
*//#define CROSS
/*十字交叉点*/&#47,struct point Cursor);int
JudgeWinLine(int Order,struct point Cursor,int direction);void ShowOrderMsg(int Order);void EndGame(void);/**********************************************************//**********************************************************//* 定义全局变量
/*指示当前行棋方
*/struct point gC
/*光标在棋盘上的位置
*/char gChessBoard[19][19];/*用于记录棋盘上各点的状态*//**********************************************************//**********************************************************//*主函数*/void main(){
int bOutWhile=FALSE;/*退出循环标志*/
Init();/*初始化图象,数据*/
press=GetKey();/*获取用户的按键值*/
switch(CheckKey(press))/*判断按键类别*/
/*是退出键*/
case KEYEXIT:
clrscr();/*清屏*/
bOutWhile = TRUE;
/*是落子键*/
case KEYFALLCHESS:
if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/
DoError();/*落子错误*/
DoOK();/*落子正确*/
/*如果当前行棋方赢棋*/
if(JudgeWin(gPlayOrder,gCursor)==TRUE)
DoWin(gPlayOrder);
bOutWhile = TRUE;/*退出循环标志置为真*/
/*交换行棋方*/
ChangeOrder();
/*是光标移动键*/
case KEYMOVECURSOR:
MoveCursor(gPlayOrder,press);
/*是无效键*/
case KEYINVALID:
if(bOutWhile==TRUE)
/*游戏结束*/
EndGame();}/**********************************************************//*界面初始化,数据初始化*/void Init(void){
char *Msg[]=
&Player1 key:&,
DO----space&,
&Player2 key:&,
UP----up&,
DOWN--down&,
LEFT--left&,
RIGHT-right&,
DO----ENTER&,
&exit game:&,
/*先手方为1号玩家*/
gPlayOrder = CHESS1;
/*棋盘数据清零, 即棋盘上各点开始的时候都没有棋子*/
for(i=0;i&19;i++)
for(j=0;j&19;j++)
gChessBoard[i][j]=CHESSNULL;
/*光标初始位置*/
gCursor.x=gCursor.y=0;
/*画棋盘*/
textmode(C40);
DrawMap();
/*显示操作键说明*/
textcolor(BROWN);
while(Msg[i]!=NULL)
gotoxy(25,3+i);
cputs(Msg[i]);
/*显示当前行棋方*/
ShowOrderMsg(gPlayOrder);
/*光标移至棋盘的左上角点处*/
gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);}/*画棋盘*/void DrawMap(void){
for(i=0;i&19;i++)
for(j=0;j&19;j++)
DrawCross(i,j);}/*画棋盘上的交叉点*/void DrawCross(int x,int y){
gotoxy(x+MAPXOFT,y+MAPYOFT);
/*交叉点上是一号玩家的棋子*/
if(gChessBoard[x][y]==CHESS1)
textcolor(LIGHTBLUE);
putch(CHESS1);
/*交叉点上是二号玩家的棋子*/
if(gChessBoard[x][y]==CHESS2)
textcolor(LIGHTBLUE);
putch(CHESS2);
textcolor(GREEN);
/*左上角交叉点*/
if(x==0&&y==0)
putch(CROSSLU);
/*左下角交叉点*/
if(x==0&&y==18)
putch(CROSSLD);
/*右上角交叉点*/
if(x==18&&y==0)
putch(CROSSRU);
/*右下角交叉点*/
if(x==18&&y==18)
putch(CROSSRD);
/*左边界交叉点*/
putch(CROSSL);
/*右边界交叉点*/
putch(CROSSR);
/*上边界交叉点*/
putch(CROSSU);
/*下边界交叉点*/
putch(CROSSD);
/*棋盘中间的交叉点*/
putch(CROSS);}/*交换行棋方*/int ChangeOrder(void){
if(gPlayOrder==CHESS1)
gPlayOrder=CHESS2;
gPlayOrder=CHESS1;
return(gPlayOrder);}/*获取按键值*/int GetKey(void){
while (bioskey(1) == 0)/*如果用户没有按键,空循环*/
press=bioskey(0);
lowbyte=press&0
press=press&0xff00 + toupper(lowbyte);
return(press);}/*落子错误处理*/void DoError(void){
sound(1200);
delay(50);
nosound();}/*赢棋处理*/void DoWin(int Order){
sound(1500);delay(100);
delay(50);
sound(800); delay(100);
delay(50);
sound(1500);delay(100);
delay(50);
sound(800); delay(100);
delay(50);
nosound();
textcolor(RED+BLINK);
gotoxy(25,20);
if(Order==CHESS1)
cputs(&PLAYER1 WIN!&);
cputs(&PLAYER2 WIN!&);
gotoxy(25,21);
\\&^+^&/&);
getch();}/*走棋*/int
ChessGo(int Order,struct point Cursor){
/*判断交叉点上有无棋子*/
if(gChessBoard[Cursor.x][Cursor.y]==CHESSNULL)
/*若没有棋子, 则可以落子*/
gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);
textcolor(LIGHTBLUE);
putch(Order);
gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);
gChessBoard[Cursor.x][Cursor.y]=O
return TRUE;
return FALSE;}/*判断当前行棋方落子后是否赢棋*/int
JudgeWin(int Order,struct point Cursor){
for(i=0;i&4;i++)
/*判断在指定方向上是否有连续5个行棋方的棋子*/
if(JudgeWinLine(Order,Cursor,i))
return TRUE;
return FALSE;}/*判断在指定方向上是否有连续5个行棋方的棋子*/int
JudgeWinLine(int Order,struct point Cursor,int direction){
struct point pos,
const int testnum = 5;
switch(direction)
case 0:/*在水平方向*/
pos.x=Cursor.x-(testnum-1);
pos.y=Cursor.y;
case 1:/*在垂直方向*/
pos.x=Cursor.x;
pos.y=Cursor.y-(testnum-1);
case 2:/*在左下至右上的斜方向*/
pos.x=Cursor.x-(testnum-1);
pos.y=Cursor.y+(testnum-1);
dpos.y=-1;
case 3:/*在左上至右下的斜方向*/
pos.x=Cursor.x-(testnum-1);
pos.y=Cursor.y-(testnum-1);
for(i=0;i&testnum*2+1;i++)
if(pos.x&=0&&pos.x&=18&&pos.y&=0&&pos.y&=18)
if(gChessBoard[pos.x][pos.y]==Order)
if(count&=testnum)
return TRUE;
pos.x+=dpos.x;
pos.y+=dpos.y;
return FALSE;}/*移动光标*/void MoveCursor(int Order,int press){
switch(press)
case PLAY1UP:
if(Order==CHESS1&&gCursor.y&0)
gCursor.y--;
case PLAY1DOWN:
if(Order==CHESS1&&gCursor.y&18)
gCursor.y++;
case PLAY1LEFT:
if(Order==CHESS1&&gCursor.x&0)
gCursor.x--;
case PLAY1RIGHT:
if(Order==CHESS1&&gCursor.x&18)
gCursor.x++;
case PLAY2UP:
if(Order==CHESS2&&gCursor.y&0)
gCursor.y--;
case PLAY2DOWN:
if(Order==CHESS2&&gCursor.y&18)
gCursor.y++;
case PLAY2LEFT:
if(Order==CHESS2&&gCursor.x&0)
gCursor.x--;
case PLAY2RIGHT:
if(Order==CHESS2&&gCursor.x&18)
gCursor.x++;
gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);}/*游戏结束处理*/void EndGame(void){
textmode(C80);}/*显示当前行棋方*/void ShowOrderMsg(int Order){
gotoxy(6,MAPYOFT+20);
textcolor(LIGHTRED);
if(Order==CHESS1)
cputs(&Player1 go!&);
cputs(&Player2 go!&);
gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);}/*落子正确处理*/void DoOK(void){
sound(500);
delay(70);
sound(600);
delay(50);
sound(1000);
delay(100);
nosound();}/*检查用户的按键类别*/int CheckKey(int press){
if(press==ESCAPE)
return KEYEXIT;/*是退出键*/
( ( press==PLAY1DO && gPlayOrder==CHESS1) ||
( press==PLAY2DO && gPlayOrder==CHESS2)
return KEYFALLCHESS;/*是落子键*/
( press==PLAY1UP
|| press==PLAY1DOWN
press==PLAY1LEFT || press==PLAY1RIGHT ||
press==PLAY2UP
|| press==PLAY2DOWN
press==PLAY2LEFT || press==PLAY2RIGHT
return KEYMOVECURSOR;/*是光标移动键*/
return KEYINVALID;/*按键无效*/};*定义符号常量;#include &stdio.h&#define CROSSU
/*上边*/#define PLAY2RIGHT
0x4d00/*右移--方向键right*&#47.h&#include &*左移--方向键left*/#define CROSSLU
/*左上角点*/*右移--'*/int
JudgeWin(int O#include &bios.h&#include &二号玩家的棋子/#define PLAY1LEFT
0x1e41/*左移--'A'*/#define PLAY1RIGHT
0x2044/void DoWin(int Order);#define PLAY1DO
0x3920/*落子--空格键*//D&#39,int y);void DrawMap(void);#define CROSSD
/*下边*/#define PLAY2DOWN
0x5000/*下移--方向键down*/#define PLAY2LEFT
0x4b00&#47.h&#include &#define MAPXOFT
5#define MAPYOFT
2/*定义1号玩家的操作键键码*/#define KEYFALLCHESS
1/*落子键*/#define KEYMOVECURSOR
2/*定义画棋盘所需的制表符*/**********************************************************///*若想在游戏中途退出;/&#47,int press);void DrawCross(* 定义符号常量
*//**********************************************************//#define PLAY2DO
0x1c0d/*落子--回车键Enter*/*棋盘交叉点坐标的数据结构*/struct point{
int x,y;};/void MoveCursor(int O#define CROSSRD
/*右下角点*/*退出键*/*自定义函数原型说明
ChangeOrder(void);int
ChessGo(int Ovoid Init(void);/没有棋子#define CHESS1
'*定义棋盘左上角点在屏幕上的位置*/int CheckKey(int press);**********************************************************//#define CROSSL
/*左边*/*定义按键类别*/#define KEYEXIT
0/#define KEYINVALID
3/*无效键*//*下移--'一号玩家的棋子#define CHESS2
'#define CROSSRU
/*右上角点*/O'*/*定义棋盘上交叉点的状态, 即该点有无棋子 */*上移--方向键up*/*定义2号玩家的操作键键码*/#define PLAY2UP
0x4800/#define CROSSR
/*右边*&#47.h&&#47**********************************************************&#47
fatal error C1083: Cannot open include file: 'bios.h': No such file or directory请问这个文件呢'bios.h':,找了很多程序,都是没有这个文件
采纳率:23%
C语言的我倒是没有、、Java的我倒是有个五子棋程序要不要呢
不必了,谢谢,作业需要是C语言的
如果你想实现这个程序的话要先构思啊,考虑一下需要的函数,如果想可视化进一步实现,那就要调用windows api 了,你对C语言了解多少
新人一枚,表示现在大一,学的很烂,现在这是数据结构作业,真心不懂如何搞
为您推荐:
其他类似问题
您可能关注的内容
五子棋的相关知识
换一换
回答问题,赢新手礼包安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&C语言,编写五子棋,我看到教程说下棋可以有两种,一种输入行,列落子,还有一种移动光标进行,我就想知_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
C语言,编写五子棋,我看到教程说下棋可以有两种,一种输入行,列落子,还有一种移动光标进行,我就想知
C语言,编写五子棋,我看到教程说下棋可以有两种,一种输入行,列落子,还有一种移动光标进行,我就想知道这个光标咋移动呢,我小白,写的都是控制台程序,棋盘都是一行一行打印的,怎么能对打印出来的东西进行操作呢(难道是不停的打印棋盘),,这到底是咋解...
我有更好的答案
url=Na8edXGIAfh5e8Eh-I4KXdlwvp_AnS1wpsx1TiGZLN6Gbp2VQsmOhiS-OJjygVBmQbdFir7U5PbWM56bGJiNWSVlplkbzf88zeigBjRngxi" target="_blank">http.baidu://wenku<a href="/link
采纳率:40%
来自团队:
记得还是学生的时候用turbo c 2.0写过, 要用到图形界面 ,好像初始化函数叫InitGraph?() ,名称记不太清了, 用鼠标方向键操作落子位置, 按回车键确定落子, 用二维数组记录哪些位置已落子,并且是黑子还是白子, 如果不用智能(也就是人机),不是很难.
本回答被网友采纳
为您推荐:
其他类似问题
作文的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&
&&&&&&&&&&&&&&&
位置:&&&&&&&&&&&&&
入门知识文章列表
中国五子棋竞赛规则(2013版)第一章 总 则第一条 五子棋的棋具1. 棋盘  棋盘可以用木材、硬纸、布料、塑料、石料或环保材料等制成。  棋盘由纵横各15条等距离、垂直交叉的平行线构成,形成225个
(文章作者:佚名、浏览次数:36331)
做杀是重要的进攻技巧之一。它应当属于VCT的一种,同时有别于直接的活三、冲四进攻,是通过“构造可能的VCF”这一方式来完成的。  做杀首先可以分为两个大类:单式做杀和复式做杀。单式做杀是指仅仅构成一套
(文章作者:李一、浏览次数:5453)
前些日子和一些初学者谈起如何自学五子棋的话题,故有写此文章略加总结的想法。其实棋力的提高,除了实战中意志方面的个人因素外,无非就是计算力、定式、棋感(这里不仅仅指感觉上模模糊糊的东西,也包括棋理、思路
(文章作者:李一、浏览次数:8605)
下面通过做几道练习题以加深对禁手的理解。禁手的解禁与利用&&&&如图19所示,盘面黑、白双方各十七珠,轮到黑方走棋。猛地一看,黑方似乎机会不少,但是,白方的i8
(文章作者:佚名、浏览次数:1172)
这一讲学习禁手,通过本讲我们会明白禁手的真正含义。不公平处见公平&&&&大家知道,白棋是没有禁手的,而黑棋却有禁手,那么为什么只给黑方设禁手呢?也许有人认为这样
(文章作者:佚名、浏览次数:1404)
这一讲主要学习职业连珠规则和特例,包括记谱的方法。简明职业连珠比赛规则&&&&1、执黑先行,白棋后行,第一颗子必须落在天元上,依次轮流落子。&&nbs
(文章作者:佚名、浏览次数:700)
这一讲学习一下连珠的基本定义与术语,万丈高楼平地起,先打一下基础吧。 一着&&&&怎么算一着棋呢?在对局过程中,行棋方把棋子落在棋盘无子的交*点上,不论落子的手
(文章作者:佚名、浏览次数:1282)
连珠入门第二讲:连珠用具&&&这一讲是要了解连珠用具,即正式连珠比赛中用到的棋具,包括棋盘、棋子和棋钟。棋盘&&&&如图1所示,连
(文章作者:佚名、浏览次数:927)
连珠入门教程第一讲:什么是连珠 &&& 这一讲是要了解连珠是什么东东。&&&&那么连珠是什么呢?其实,连珠就是五子棋,说的准确点,
(文章作者:佚名、浏览次数:1409)
RIF 规则&&&&1.&&第一位棋手下第一手(规定H8天元位置)&&&&2.&&nbsp
(文章作者:佚名、浏览次数:1178)
共 60 篇文章&&首页 | 上一页 | 1
| &10篇文章/页&&转到第页
本栏最新热门图片
?&?&?&?&?&?&?&?&?&?&对不起,您要访问的页面暂时没有找到,您可以:

我要回帖

更多关于 js实现五子棋 的文章

 

随机推荐