五子棋youxi

上传人:子 文档编号:43385522 上传时间:2018-06-05 格式:DOC 页数:18 大小:44.50KB
返回 下载 相关 举报
五子棋youxi_第1页
第1页 / 共18页
五子棋youxi_第2页
第2页 / 共18页
五子棋youxi_第3页
第3页 / 共18页
五子棋youxi_第4页
第4页 / 共18页
五子棋youxi_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《五子棋youxi》由会员分享,可在线阅读,更多相关《五子棋youxi(18页珍藏版)》请在金锄头文库上搜索。

1、五子棋五子棋 youxiyouxi#include #include #include #include #include #define CROSSRU 0xbf /*右上角点*/#define CROSSLU 0xda /*左上角点*/#define CROSSLD 0xc0 /*左下角点*/#define CROSSRD 0xd9 /*右下角点*/#define CROSSL 0xc3 /*左边*/#define CROSSR 0xb4 /*右边*/#define CROSSU 0xc2 /*上边*/#define CROSSD 0xc1 /*下边*/#define CROSS 0xc5

2、 /*十字交叉点*/*定义棋盘左上角点在屏幕上的位置*/#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 P

3、LAY2DOWN 0x5000/*下移-方向键 down*/#define PLAY2LEFT 0x4b00/*左移-方向键 left*/#define PLAY2RIGHT 0x4d00/*右移-方向键 right*/#define PLAY2DO 0x1c0d/*落子-回车键 Enter*/*若想在游戏中途退出, 可按 Esc 键*/#define ESCAPE 0x011b/*定义棋盘上交叉点的状态, 即该点有无棋子 */*若有棋子, 还应能指出是哪个玩家的棋子 */#define CHESSNULL 0 /*没有棋子*/#define CHESS1 O/*一号玩家的棋子*/#defin

4、e CHESS2 X/*二号玩家的棋子*/*定义按键类别*/#define KEYEXIT 0/*退出键*/#define KEYFALLCHESS 1/*落子键*/#define KEYMOVECURSOR 2/*光标移动键*/#define KEYINVALID 3/*无效键*/*定义符号常量: 真, 假 - 真为 1, 假为 0 */#define TRUE 1#define FALSE 0/*/* 定义数据结构 */*棋盘交叉点坐标的数据结构*/struct pointint x,y;/*/*自定义函数原型说明 */void Init(void);int GetKey(void);in

5、t 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,s

6、truct point Cursor,int direction);void ShowOrderMsg(int Order);void EndGame(void);/*/*/* 定义全局变量 */int gPlayOrder; /*指示当前行棋方 */struct point gCursor; /*光标在棋盘上的位置 */char gChessBoard1919;/*用于记录棋盘上各点的状态*/*/*/*主函数*/void main()int press;int bOutWhile=FALSE;/*退出循环标志*/printf(“Welcome “);Init();/*初始化图象,数据*/wh

7、ile(1)press=GetKey();/*获取用户的按键值*/switch(CheckKey(press)/*判断按键类别*/*是退出键*/case KEYEXIT:clrscr();/*清屏*/bOutWhile = TRUE;break;/*是落子键*/case KEYFALLCHESS:if(ChessGo(gPlayOrder,gCursor)=FALSE)/*走棋*/DoError();/*落子错误*/elseDoOK();/*落子正确*/*如果当前行棋方赢棋*/if(JudgeWin(gPlayOrder,gCursor)=TRUE)DoWin(gPlayOrder);bOut

8、While = TRUE;/*退出循环标志置为真*/*否则*/else/*交换行棋方*/ChangeOrder();ShowOrderMsg(gPlayOrder);break;/*是光标移动键*/case KEYMOVECURSOR:MoveCursor(gPlayOrder,press);break;/*是无效键*/case KEYINVALID:break;if(bOutWhile=TRUE)break;/*游戏结束*/EndGame();/*/*界面初始化,数据初始化*/void Init(void)int i,j;char *Msg=“Player1 key:“,“ UP-w“,“

9、DOWN-s“,“ LEFT-a“,“ RIGHT-d“,“ DO-space“,“,“Player2 key:“,“ UP-up“,“ DOWN-down“,“ LEFT-left“,“ RIGHT-right“,“ DO-ENTER“,“,“exit game:“,“ ESC“,NULL,;/* 先手方为 1 号玩家 */gPlayOrder = CHESS1;/* 棋盘数据清零, 即棋盘上各点开始的时候都没有棋子 */for(i=0;i/“);getch();/*走棋*/int ChessGo(int Order,struct point Cursor)/*判断交叉点上有无棋子*/if(

10、gChessBoardCursor.xCursor.y=CHESSNULL)/*若没有棋子, 则可以落子*/gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);textcolor(LIGHTBLUE);putch(Order);gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);gChessBoardCursor.xCursor.y=Order;return TRUE;elsereturn FALSE;/*判断当前行棋方落子后是否赢棋*/int JudgeWin(int Order,struct point Cursor)int

11、i;for(i=0;i=0elsecount=0;pos.x+=dpos.x;pos.y+=dpos.y;return FALSE;/*移动光标*/void MoveCursor(int Order,int press)switch(press)case PLAY1UP:if(Order=CHESS1break;case PLAY1DOWN:if(Order=CHESS1break;case PLAY1RIGHT:if(Order=CHESS1break;case PLAY2DOWN:if(Order=CHESS2break;case PLAY2RIGHT:if(Order=CHESS2bre

12、ak;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!“);elsecputs(“Player2 go!“);gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);/*落子正确处理*/void DoOK(void)

13、sound(500);delay(70);sound(600);delay(50);sound(1000);delay(100);nosound();/*检查用户的按键类别*/int CheckKey(int press)if(press=ESCAPE)return KEYEXIT;/*是退出键*/elseif( ( press=PLAY1DO /*是落子键*/elseif( press=PLAY1UP | press=PLAY1DOWN |press=PLAY1LEFT | press=PLAY1RIGHT |press=PLAY2UP | press=PLAY2DOWN |press=PLAY2LEFT | press=PLAY2RIGHT)return KEYMOVECURSOR;/*是光标移动键*/elsereturn KEYINVALID;/*按键无效*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号