毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

C语言课程设计-五子棋双人对战程序

更新时间:2007-10-23:  来源:毕业论文

C语言课程设计-五子棋双人对战程序|c语言程序代码编程小程序设计|c语言课程设计报告课程案例 <!--StartFragment-->/*      本程序在Turbo C或Borland C下编译通过              */
/* 五子棋 双人对战程序   */
/* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   */
/**********************************************************/

/**********************************************************/
/* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */

#include &lt;stdio.h&gt;
#include &lt;bios.h&gt;
#include &lt;ctype.h&gt;
#include &lt;conio.h&gt;
#include &lt;dos.h&gt;

/**********************************************************/
/* 定义符号常量                                           */

/*定义画棋盘所需的制表符*/
#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 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   0  /*没有棋子*/
#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);
/**********************************************************/

/**********************************************************/
/* 定义全局变量                                           */
int  gPlayOrder;         /*指示当前行棋方          */
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();
  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",
    "  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&lt;19;i++)
    for(j=0;j&lt;19;j++)
      gChessBoard[i][j]=CHESSNULL;
  /*光标初始位置*/
  gCursor.x=gCursor.y=0;

  /*画棋盘*/
  textmode(C40);
  DrawMap();

  /*显示操作键说明*/
  i=0;
  textcolor(BROWN);
  while(Msg[i]!=NULL)
  {
    gotoxy(25,3+i);
    cputs(Msg[i]);
    i++;
  }

  /*显示当前行棋方*/
  ShowOrderMsg(gPlayOrder);
  /*光标移至棋盘的左上角点处*/
  gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);
}

/*画棋盘*/
void DrawMap(void)
{
  int i,j;

  clrscr();

  for(i=0;i&lt;19;i++)
    for(j=0;j&lt;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);
    return;
  }
  /*交叉点上是二号玩家的棋子*/
  if(gChessBoard[x][y]==CHESS2)
  {
    textcolor(LIGHTBLUE);
    putch(CHESS2);
    return;
  }

  textcolor(GREEN);

  /*左上角交叉点*/
  if(x==0&amp;&amp;y==0)
  {
    putch(CROSSLU);
    return;
  }

  /*左下角交叉点*/
  if(x==0&amp;&amp;y==18)
  {
    putch(CROSSLD);
    return;
  }

[1] [2] 下一页

C语言课程设计-五子棋双人对战程序下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。