三子棋游戏(简单)————C语言实现

三子棋游戏(简单)————C语言实现

game1


在学完数组后可以尝试编一个简单的三子棋游戏,用二维数组、函数、随机数的生成和预处理指令来完成。

实现的功能:

1.棋盘的初始化 
2.棋盘的打印 
3.玩家下棋 
4.电脑下棋 
5.判断输赢

玩家下棋时输入的横纵坐标范围是(1 ~ 3),而数组第一个元素的下标的以 0 开始的,所以在编代码的时候得注意一下。

电脑下棋的时候坐标是用随机生成的,所以编三子棋游戏你要学会怎么生成一个随机数。电脑下棋的时候横纵坐标范围是(0 ~ 2),不用像玩家下棋的时候那样处理了。

判断输赢的时候有四种情况:1.玩家赢;2.电脑赢;3.平局;4.还没下完,继续游戏。

示例代码如下:

1. game.h用于函数定义

    
    
  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #ifndef __GAME_H__
  3. #define __GAME_H__
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8. #define ROW 3
  9. #define COL 3
  10. void printboard(char board[ROW][COL],int row,int col); //打印棋盘
  11. void initboard(char board[ROW][COL],int row,int col); //初始化棋盘
  12. void playermove(char board[ROW][COL],int row,int col); //玩家下棋
  13. void computermove(char board[ROW][COL],int row,int col); //电脑下棋
  14. char checkwin(char board[ROW][COL],int row,int col); //判输赢
  15. int isfull(char board[ROW][COL],int row,int col); //判断棋盘是否为满
  16. #endif //__GAME_H__

2.源文件test.c用于存放主函数

    
    
  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include "game.h"
  3. void game()
  4. {
  5. char ret = 0;
  6. char board[ROW][COL]={'0'};
  7. initboard(board,ROW,COL);
  8. printboard(board,ROW,COL);
  9. while(1)
  10. {
  11. playermove(board,ROW,COL);
  12. printboard(board,ROW,COL);
  13. ret = checkwin(board,ROW,COL);
  14. if(ret == 'X')
  15. {
  16. printf("恭喜你赢了!\n");
  17. break;
  18. }
  19. else if (ret == 'Q')
  20. {
  21. printf ("平局\n");
  22. break;
  23. }
  24. computermove(board,ROW,COL);
  25. printboard(board,ROW,COL);
  26. ret = checkwin(board,ROW,COL);
  27. if (ret == '0')
  28. {
  29. printf ("电脑赢!\n");
  30. break;
  31. }
  32. }
  33. }
  34. void game2()
  35. {
  36. char ret = 0;
  37. char board[ROW][COL]={'0'};
  38. initboard(board,ROW,COL);
  39. printboard(board,ROW,COL);
  40. while(1)
  41. {
  42. computermove(board,ROW,COL);
  43. printboard(board,ROW,COL);
  44. ret = checkwin(board,ROW,COL);
  45. if (ret == '0')
  46. {
  47. printf ("电脑赢!\n");
  48. break;
  49. }
  50. else if (ret == 'Q')
  51. {
  52. printf ("平局\n");
  53. break;
  54. }
  55. playermove(board,ROW,COL);
  56. printboard(board,ROW,COL);
  57. ret = checkwin(board,ROW,COL);
  58. if(ret == 'X')
  59. {
  60. printf("恭喜你赢了!\n");
  61. break;
  62. }
  63. }
  64. }
  65. void menu2()
  66. {
  67. printf (" *****************************************\n");
  68. printf (" ** 1.玩家先走 2.电脑先走 **\n");
  69. printf (" *****************************************\n");
  70. }
  71. void menu()
  72. {
  73. printf ("--------------------欢迎来到三子棋游戏--------------------\n");
  74. printf (" *****************************************\n");
  75. printf (" ** 1.play 0.exit **\n");
  76. printf (" *****************************************\n");
  77. }
  78. void main2()
  79. {
  80. int input = 0;
  81. printf ("请输入你的选择:");
  82. scanf ("%d",&input);
  83. switch (input)
  84. {
  85. case 1:
  86. game();
  87. break;
  88. case 2:
  89. game2();
  90. break;
  91. default:
  92. printf ("输入错误,请重新选择!\n");
  93. }
  94. }
  95. int main ()
  96. {
  97. int input = 0;
  98. srand ((unsigned int)(time (NULL)));
  99. do
  100. {
  101. menu();
  102. printf ("请输入你的选择:");
  103. scanf ("%d",&input);
  104. switch (input)
  105. {
  106. case 1:
  107. menu2();
  108. main2();
  109. break;
  110. case 0:
  111. break;
  112. default:
  113. printf ("输入错误,请重新选择!\n");
  114. }
  115. }while(input);
  116. system("pause\n");
  117. return 0;
  118. }

3.源文件game.c实现游戏的函数

    
    
  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include "game.h"
  3. //打印棋盘
  4. void printboard(char board[ROW][COL],int row,int col)
  5. {
  6. int i = 0;
  7. for (i = 0;i < row; i++)
  8. {
  9. printf (" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
  10. if (i<row-1)
  11. printf (" ---|---|---\n");
  12. }
  13. }
  14. //初始化
  15. void initboard(char board[ROW][COL],int row,int col)
  16. {
  17. memset(board,' ',row * col * sizeof(board[0][0]));
  18. }
  19. //玩家走
  20. void playermove(char board[ROW][COL],int row,int col)
  21. {
  22. int x = 0;
  23. int y = 0;
  24. printf("玩家走:\n");
  25. while (1)
  26. {
  27. printf ("请输入坐标: ");
  28. scanf ("%d%d",&x,&y);
  29. if (x >= 1 && x <= row && y >= 1 && y <= col && board[x-1][y-1] == ' ')
  30. {
  31. board[x-1][y-1] = 'X';
  32. break;
  33. }
  34. else
  35. printf("坐标不合法,请重新输入\n");
  36. }
  37. }
  38. //电脑走
  39. void computermove(char board[ROW][COL],int row,int col)
  40. {
  41. int x = 0;
  42. int y = 0;
  43. printf ("电脑走:\n");
  44. while(1)
  45. {
  46. x = rand()%3;
  47. y = rand()%3;
  48. if (board[x][y] == ' ')
  49. {
  50. board[x][y] = '0';
  51. break;
  52. }
  53. }
  54. }
  55. //判棋盘是否满了
  56. int isfull(char board[ROW][COL],int row,int col)
  57. {
  58. int i = 0;
  59. int j = 0;
  60. for(i = 0; i < row; i++)
  61. {
  62. for (j = 0; j < col; j++)
  63. {
  64. if (board[i][j] == ' ')
  65. return 0;
  66. }
  67. }
  68. return 1;
  69. }
  70. //判输赢
  71. char checkwin(char board[ROW][COL],int row,int col)
  72. {
  73. int i = 0;
  74. //1.玩家赢 返回‘X2.电脑赢 返回 0
  75. for (i = 0; i < row; i++) //三行
  76. {
  77. if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
  78. return board[i][0];
  79. }
  80. for (i = 0; i < col; i++) //三列
  81. {
  82. if (board[0][i] == board[1][i] && board[1][i] == board[2][i])
  83. return board[0][i];
  84. }
  85. if (board[0][0]== board[1][1] && board[1][1] == board[2][2]) //对角线
  86. return board[0][0];
  87. if (board[0][2]== board[1][1] && board[1][1] == board[2][0])
  88. return board[0][0];
  89. //3.平局 返回 Q’//4.继续玩 返回 ' '
  90. if (isfull(board,ROW,COL))
  91. return 'Q';
  92. else
  93. return ' ';
  94. }

以上程序在vs2008中可运行

+

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值