• C语言简易三子棋


       这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点

      1 #define _CRT_SECURE_NO_WARNINGS
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 #define ROW 3
      5 #define COL 3
      6 char chess_board[ROW][COL];
      7 int PlayGame(int choice){
      8     printf("************************
    ");
      9     printf("*  欢迎来到三子棋游戏  *
    ");
     10     printf("*       请您选择       *
    ");
     11     printf("*      1.开始游戏      *
    ");
     12     printf("*      2.离开游戏      *
    ");
     13     printf("************************
    ");
     14     while (1){
     15         scanf("%d", &choice);
     16         if (choice == 1)
     17         {
     18             return 1;
     19             break;
     20         }
     21         else if (choice == 2)
     22         {
     23             return 0;
     24             break;
     25         }
     26         else
     27         {
     28             printf("输入非法,请重新输入!");
     29             continue;
     30         }
     31     }
     32 }
     33 int Init(char a[ROW][COL]){
     34     for (int row = 0; row <ROW; row++){
     35         for (int col = 0; col < COL; col++)
     36         {
     37             a[row][col] = '  ';
     38         }
     39     }
     40     return 0;
     41 }
     42 void Print(char a[ROW][COL]){
     43     printf("           
    ");
     44     for (int i = 0; i < ROW; i++){
     45         printf("  %c | %c  | %c 
    ", a[i][0], a[i][1], a[i][2]);
     46         if (i != 3){
     47             printf("----|----|----
    ");
     48         }
     49     }
     50 }
     51 void PlayerMove(char a[ROW][COL]){
     52     int row = -1;
     53     int col = -1;
     54     while (1){
     55         printf("请您选择落子点坐标:");
     56         scanf("%d %d", &row, &col);
     57         if (row<0 || row>2 || col<0 || col>2){
     58             printf("输入非法,请重新输入!");
     59             continue;
     60         }
     61         else if (a[row][col] == 'x' || a[row][col] == 'o')
     62         {
     63             printf("已有棋子,请重新选择坐标!");
     64             continue;
     65         }
     66         else
     67         {
     68             a[row][col] = 'o';
     69             break;
     70         }
     71 
     72     }
     73 }
     74 int IsFull(char a[ROW][COL]){
     75     int sum = 0;
     76     for (int row = 0; row < ROW; row++)
     77     {
     78         for (int col = 0; col < COL; col++)
     79         {
     80             if (a[row][col] != ' ')
     81             {
     82 
     83                 sum++;
     84             }
     85         }
     86     }
     87     if (sum == 9){
     88         return 1;
     89     }
     90 }
     91 char Checkwinner(char a[ROW][COL]){
     92     //1.判断三子 横 竖 斜
     93     for (int row = 0; row < ROW; row++){
     94         if (a[row][0] == a[row][1] && a[row][0] == a[row][2] && a[row][0] != ' ')
     95         {
     96             return 'p';
     97         }
     98     }
     99     for (int col = 0; col < COL; col++){
    100         if (a[0][col] == a[1][col] && a[0][col] == a[2][col] && a[0][col] != ' ')
    101         {
    102             return 'p';
    103         }
    104     }
    105     if (a[0][0] == a[1][1] && a[0][0] == a[2][2] && a[0][0] != ' ')
    106     {
    107         return 'p';
    108     }
    109     if (a[0][2] == a[1][1] && a[0][2] == a[2][0] && a[0][2] != ' '){
    110         return 'p';
    111     }
    112 }
    113 
    114 
    115 
    116 
    117 void ComputeMove(char a[ROW][COL]){
    118     printf("请电脑落子!
    ");
    119     while (1){
    120         int col = rand() % 3;
    121         int row = rand() % 3;
    122         if (a[row][col] == ' ')
    123         {
    124             a[row][col] = 'x';
    125             break;
    126         }
    127         else continue;
    128     }
    129 }
    130 void Game(){
    131     Init(chess_board);//2.棋盘初始化
    132     Print(chess_board);//3.打印棋盘
    133     while (1){
    134 
    135         PlayerMove(chess_board);//4.用户落子
    136         Print(chess_board);
    137         if (Checkwinner(chess_board) == 'p')
    138         {
    139             printf("玩家获胜!
    ");
    140             break;
    141         }
    142         if (IsFull(chess_board) == 1)//2.判断是否和棋
    143         {
    144             printf("平局!");
    145             break;
    146         }
    147         ComputeMove(chess_board);//6.电脑随机落子
    148         Print(chess_board);//3.打印棋盘
    149         if (Checkwinner(chess_board) == 'p')
    150         {
    151             printf("电脑获胜!
    ");
    152             break;
    153         }
    154 
    155         if (IsFull(chess_board) == 1)//2.判断是否和棋
    156         {
    157             printf("平局!
    ");
    158             break;
    159         }
    160     }
    161 }
    162 
    163 
    164 int main(){
    165     int choice = 0;
    166     if (PlayGame(choice) == 1) {   //1.选择是否开始游戏  a)开始  b)离开
    167          Game();
    168 
    169     }
    170     system("pause");
    171 }
  • 相关阅读:
    springBoot从入门到源码分析
    MQ疑难杂症小记
    dubbo学习思路梳理
    Zookeeper
    分布式系统理论概述
    mysql,存储引擎,事务,锁,慢查询,执行计划分析,sql优化
    tomcat学习步骤,附带打破双亲委派模型企业应用实战
    使用UtraISO为U盘制作系统启动盘
    洛谷P3369 splay或treap
    gym 101982 B题 Coprime Integers
  • 原文地址:https://www.cnblogs.com/Duikerdd/p/9811917.html
Copyright © 2020-2023  润新知