★★★高分悬赏★★★用C语言编简单的五子棋(答案好的追加100分)

[复制链接]
查看11 | 回复2 | 2007-9-22 10:20:27 | 显示全部楼层 |阅读模式
#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/*十字交叉点*//*定义棋盘左上角点在屏幕上的位置*/#define MAPXOFT
5#define MAPYOFT
2/*定义1号玩家的操作键键码*/#define PLAY1UP
0x1157/*上移--'W'*/#define PLAY1DOWN 0x1f53/*下移--'S'*/#define PLAY1LEFT 0x1e41/*左移--'A'*/#define PLAY1RIGHT0x2044/*右移--'D'*/#define PLAY1DO
0x3920/*落子--空格键*//*定义2号玩家的操作键键码*/#define PLAY2UP
0x4800/*上移--方向键up*/#define PLAY2DOWN 0x5000/*下移--方向键down*/#define PLAY2LEFT 0x4b00/*左移--方向键left*/#define PLAY2RIGHT0x4d00/*右移--方向键right*/#define PLAY2DO
0x1c0d/*落子--回车键Enter*//*若想在游戏中途退出, 可按 Esc 键*/#define ESCAPE
0x011b/*定义棋盘上交叉点的状态, 即该点有无棋子 *//*若有棋子, 还应能指出是哪个玩家的棋子 */#define CHESSNULL 0/*没有棋子*/#define CHESS1
'O'/*一号玩家的棋子*/#define CHESS2
'X'/*二号玩家的棋子*//*定义按键类别*/#define KEYEXIT
0/*退出键*/#define KEYFALLCHESS 1/*落子键*/#define KEYMOVECURSOR2/*光标移动键*/#define KEYINVALID
3/*无效键*//*定义符号常量: 真, 假 --- 真为1, 假为0 */#define TRUE
1#define FALSE
0/**********************************************************//* 定义数据结构
*//*棋盘交叉点坐标的数据结构*/struct point{ int x,y;};/**********************************************************//*自定义函数原型说明
*/void Init(void);intGetKey(void);int CheckKey(int press);intChangeOrder(void);intChessGo(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);intJudgeWin(int Order,struct point Cursor);intJudgeWinLine(int Order,struct point Cursor,int direction);void ShowOrderMsg(int Order);void EndGame(void);/**********************************************************//**********************************************************//* 定义全局变量
*/intgPlayOrder;
/*指示当前行棋方
*/struct point gCursor;
/*光标在棋盘上的位置
*/char gChessBoard[19][19];/*用于记录棋盘上各点的状态*//**********************************************************//**********************************************************//*主函数*/void main(){int press;int bOutWhile=FALSE;/*退出循环标志*/Init();/*初始化图象,数据*/while(1){
press=GetKey();/*获取用户的按键值*/
switch(CheckKey(press))/*判断按键类别*/
{
/*是退出键*/
case KEYEXIT:
clrscr();/*清屏*/
bOutWhile = TRUE;
break;/*是落子键*/
case KEYFALLCHESS:
if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/
DoError();/*落子错误*/
else
{
DoOK();/*落子正确*/
/*如果当前行棋方赢棋*/
if(JudgeWin(gPlayOrder,gCursor)==TRUE)
{
DoWin(gPlayOrder);
bOutWhile = TRUE;/*退出循环标志置为真*/
}
/*否则*/
else
/*交换行棋方*/
ChangeOrder();
}
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",
"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();}/*走棋*/intChessGo(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]=Order;
return TRUE; } else
return FALSE;}/*判断当前行棋方落子后是否赢棋*/intJudgeWin(int Order,struct point Cursor){int i;for(i=0;i=0&&pos.x=0&&pos.y=testnum)
return TRUE;
}
else
count=0;
}
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--;
break;case PLAY1DOWN:
if(Order==CHESS1&&gCursor.y0)
gCursor.x--;
break;case PLAY1RIGHT:
if(Order==CHESS1&&gCursor.x0)
gCursor.y--;
break;case PLAY2DOWN:
if(Order==CHESS2&&gCursor.y0)
gCursor.x--;
break;case PLAY2RIGHT:
if(Order==CHESS2&&gCursor.x #include#include#include#define KEY_UP 0x48 #define KEY_LEFT 0x4B #define KEY_RIGHT 0x4D #define KEY_DOWN 0x50 #define XIAZI32 int x=320,y=230; int who=2; int zuobiao[10][10]; int xi=5,yi=5; int ifover=1; char player1[20],player2[20]; void initgr(void) /* BGI3?ê??ˉ */ {
int gd=DETECT,gm=0; /* oígd=VGA,gm=VGAHIê?í??ùD§1? */
registerbgidriver(EGAVGA_driver);/* ×¢2áBGI?y?ˉoó?éò?2?Dèòa.BGI???tμ??§3???DD */
initgraph(&gd,&gm,""); } void drawmat(char *mat,int matsize,int x,int y,int color) /*òà′?£o×??£?????¢μ??ó′óD??¢?eê?×?±ê(x,y)?¢??é?*/ {int i,j,k,n;n=(matsize-1)/8+1;for(j=0;j>k))/*2aê??a1μ????ò??ê?*/
putpixel(x+i*8+k,y+j,color); } char wu24[]={ /* ò???ê? '??' μ? 24μ??ó??ì? ×??££?72 byte */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0x1F,0xFF,0xE0,0x00, 0x30,0x00,0x00,0x30,0x00,0x00,0x20,0x00, 0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x20, 0x40,0x0F,0xFF,0xE0,0x00,0x60,0x40,0x00, 0x60,0x40,0x00,0x40,0x40,0x00,0x40,0x40, 0x00,0x40,0x40,0x00,0x40,0xC0,0x00,0xC0, 0xC0,0x00,0xC0,0xC0,0x00,0xC0,0xC4,0x7F, 0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, }; char zi24[]={ /* ò???ê? '×ó' μ? 24μ??ó??ì? ×??££?72 byte */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x0F,0xFF,0xF0,0x00,0x00,0x60,0x00, 0x00,0x80,0x00,0x01,0x00,0x00,0x16,0x00, 0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x08, 0x0C,0x7F,0xFF,0xFE,0x00,0x08,0x00,0x00, 0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00, 0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08, 0x00,0x00,0x08,0x00,0x00,0x18,0x00,0x00, 0xF8,0x00,0x00,0x30,0x00,0x00,0x00,0x00, }; char qi24[]={ /* ò???ê? '??' μ? 24μ??ó??ì? ×??££?72 byte */ 0x00,0x00,0x00,0x04,0x00,0x00,0x06,0x0C, 0x30,0x04,0x08,0x20,0x04,0x08,0x20,0x04, 0x08,0x2C,0x04,0xFF,0xF0,0x3F,0xC8,0x20, 0x04,0x08,0x20,0x04,0x0F,0xE0,0x0F,0x08, 0x20,0x0D,0x88,0x20,0x0C,0x88,0x20,0x14, 0x8F,0xE0,0x14,0x08,0x20,0x24,0x08,0x24, 0x24,0xF7,0xD8,0x44,0x00,0x00,0x04,0x0C, 0x60,0x04,0x18,0x30,0x04,0x30,0x1C,0x04, 作者: 小黑波2006-6-25 01:48 回复此发言
-------------------------------------------------------------------------------- 2 ◆◆◆五子棋◆◆◆ 0x60,0x0C,0x04,0x80,0x04,0x00,0x00,0x00, }; void welcome(){ int i,j;initgr(); /* BGI3?ê??ˉ */outtextxy(10,10,"welcome to use v1.0");outtextxy(200,30,"welcome");setcolor(GREEN);setbkcolor(DARKGRAY);drawmat(wu24,24,150,125,YELLOW);drawmat(zi24,24,180,125,YELLOW);drawmat(qi24,24,210,125,YELLOW);rectangle(149,125,235,150);outtextxy(250,110,"player1");outtextxy(320,110,"player2");circle(280,140,20);circle(350,140,20);floodfill(280,130,GREEN); setfillstyle(1,BLUE);floodfill(350,130,GREEN);moveto(230,260);outtext("intruction");outtextxy(180,275,"1.press up
to up");outtextxy(180,285,"2.press liftto lift");outtextxy(180,295,"3.press dowmto dowm");outtextxy(180,305,"4.press right to right");outtextxy(180,315,"5.press space to input and esc to exit");outtextxy(180,325,"6.player1 use the white");outtextxy(180,335,"7.player2 use the blue"); /***********draw line*******************/
rectangle(130,20,500,460); getch(); /* ?Yí£ò???£??′?′?°????í?′ú??μ???DD?á1? */ } void qipan(){ int i,j; cleardevice(); setcolor(BROWN); setbkcolor(DARKGRAY); setviewport(50,50,700,550,1); for(i=120;i<520;i=i+50){
for(j=30;j<430;j=j+50){
/* ?-ò???8*8μ????ì */ rectangle(i,j,i+50,j+50);
} } } void xiazi(){
int temp=BROWN;
switch(getch()){
case27:
exit(0);
break;
case KEY_DOWN:
/*?D??·??ò??*/
if(y!=430){
if(zuobiao[xi][yi]==1)
{ temp=BLUE;}
if(zuobiao[xi][yi]==2)
{temp=WHITE; }
回复

使用道具 举报

千问 | 2007-9-22 10:20:27 | 显示全部楼层
去百度贴吧,C语言吧找,那里有现成的。
回复

使用道具 举报

千问 | 2007-9-22 10:20:27 | 显示全部楼层
我曾经做过一个,比较复杂,如果你要的话可以发给你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行