求小哥哥给我一个c语言五子棋源代码c语言程序

已解决问题
求一个用C语言编写五子棋游戏的全部代码.
我急需一个用C语言编写五子棋游戏(2玩家的就行,不必要电脑玩家)的全部代码。一定要能够用Microsoft Visual Studio编译通过的。谢了!
浏览次数:1327
用手机阿里扫一扫
最满意答案
这个程序还需要两个文件,告诉我你邮箱,我发给你源程序前半部分/*加载头文件*/#include&stdio.h&#include&stdlib.h&#include&graphics.h&#include&bios.h&#include&conio.h&/*编译预处理,定义按键码*/#define&LEFT&0x4b00&#define&RIGHT&0x4d00&#define&DOWN&0x5000&#define&UP&0x4800&/*若想在游戏中途退出,&可按&Esc&键*/#define&ESC&0x011b&/*SPACE键表示落子*/#define&SPACE&0x3920/*设置偏移量*/#define&OFFSET&20#define&OFFSET_x&4#define&OFFSET_y&3/*定义数组大小*/#define&N&19/*定义全局变量*/int&status[N][N];&/*定义的数组,保存状态*/int&step_x,step_y;/*行走的坐标*/int&key&;&/*获取按下的键盘的键*/int&&/*玩家标志*//*自定义函数原型*/void&DrawBoard();void&DrawCircle(int&x,int&y,int&color);void&Alternation();void&JudgePlayer(int&x,int&y);void&Done();int&ResultCheck(int&x,int&y);void&WelcomeInfo();void&ShowMessage();/*定义函数*//*显示欢迎信息函数*/void&WelcomeInfo(){char&ch&;/*移动光标到指定位置*/gotoxy(12,4);/*显示欢迎信息*/printf(&Welcome&you&to&gobang&word!&);gotoxy(12,6);printf(&1.You&can&use&the&up,down,left&and&right&key&to&move&the&chessman,&);gotoxy(12,8);printf(&&and&you&can&press&Space&key&to&enter&after&you&move&it&!&);gotoxy(12,10);printf(&2.You&can&use&Esc&key&to&exit&the&game&too&!&);gotoxy(12,12);
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok用C语言写一个五子棋游戏_百度知道
用C语言写一个五子棋游戏
用C语言写一个五子棋的小游戏 最好加上注释
我研究一下!
我有更好的答案
**********************************************************//* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */#include &stdio.h&#include &bios.h&#include &ctype.h&#include &conio.h&#include &dos.h&/**********************************************************//* 定义符号常量
*//*定义画棋盘所需的制表符*/#define CROSSRU
/*右上角点*/#define CROSSLU
/*左上角点*/#define CROSSLD
/*左下角点*/#define CROSSRD
/*右下角点*/#define CROSSL
/*左边*/#define CROSSR
/*右边*/#define CROSSU
/*上边*/#define CROSSD
/*下边*/#define CROSS
/*十字交叉点*//*定义棋盘左上角点在屏幕上的位置*/#define MAPXOFT
5#define MAPYOFT
2/*定义1号玩家的操作键键码*/#define PLAY1UP
0x1157/*上移--'W'*/#define PLAY1DOWN
0x1f53/*下移--'S'*/#define PLAY1LEFT
0x1e41/*左移--'A'*/#define PLAY1RIGHT
0x2044/*右移--'D'*/#define PLAY1DO
0x3920/*落子--空格键*//*定义2号玩家的操作键键码*/#define PLAY2UP
0x4800/*上移--方向键up*/#define PLAY2DOWN
0x5000/*下移--方向键down*/#define PLAY2LEFT
0x4b00/*左移--方向键left*/#define PLAY2RIGHT
0x4d00/*右移--方向键right*/#define PLAY2DO
0x1c0d/*落子--回车键Enter*//*若想在游戏中途退出, 可按 Esc 键*/#define ESCAPE
0x011b/*定义棋盘上交叉点的状态, 即该点有无棋子 *//*若有棋子, 还应能指出是哪个玩家的棋子
*/#define CHESSNULL
//没有棋子#define CHESS1
'O'//一号玩家的棋子#define CHESS2
'X'//二号玩家的棋子/*定义按键类别*/#define KEYEXIT
0/*退出键*/#define KEYFALLCHESS
1/*落子键*/#define KEYMOVECURSOR
2/*光标移动键*/#define KEYINVALID
3/*无效键*//*定义符号常量: 真, 假 --- 真为1, 假为0 */#define TRUE
1#define FALSE
0/**********************************************************//* 定义数据结构
*//*棋盘交叉点坐标的数据结构*/struct point{
int x,y;};/**********************************************************//*自定义函数原型说明
*/void Init(void);int
GetKey(void);int CheckKey(int press);int
ChangeOrder(void);int
ChessGo(int Order,struct point Cursor);void DoError(void);void DoOK(void);void DoWin(int Order);void MoveCursor(int Order,int press);void DrawCross(int x,int y);void DrawMap(void);int
JudgeWin(int Order,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;/*按键无效*/}
采纳率:24%
天拉.. 我也正在写五子棋,想不出怎么才这么点代码啊???..郁闷.我也研究下,不知道这五子棋能发挥出什么样的下棋水准?
为您推荐:
其他类似问题
五子棋的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。11:18 提问
C语言五子棋求源码参考
C语言课程设计有一个题让写五子棋程序出,哪位大神有五子棋的源码,参考一下
按赞数排序
这种作业题网上到处都有
网上找一找,一般这里的人,最多就是给你百度一下啊
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐编写一道五子棋的C语言程序,如何写一个鼠标点击的函数,麻烦哪位高手帮我写一个简单易懂的。_百度知道
编写一道五子棋的C语言程序,如何写一个鼠标点击的函数,麻烦哪位高手帮我写一个简单易懂的。
我有更好的答案
不能,除非用 C# 或 Visual C++
控制台??/用鼠标??至少得是win32的非控制台程序吧!!!
你的画图用的是什么语句?printf?
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c语言程序设计 五子棋_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
c语言程序设计 五子棋
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩13页未读,
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 c语言五子棋源代码 的文章

 

随机推荐