一个简单的三子棋

    xiaoxiao2022-07-04  192

    一份菜单

    void menu() { printf("*********************\n"); printf("***** 1. play *****\n"); printf("***** 0. exit *****\n"); printf("*********************\n"); }

    玩游戏否

    void test() { int input; srand(time(NULL)); do{ menu(); printf("请选择\n"); scanf_s("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("输入非法,请从新输入\n"); break; } } while (input); }

    初始化一下数组

    void chushihua(char qi[HANG][LIE], int hang, int lie) { int i, j; for (i = 0; i < hang; i++) for (j = 0; j < lie; j++) qi[i][j] = ' '; }

    来个棋盘

    void display(char qi[HANG][LIE], int hang, int lie) { int i; for (i = 0; i < hang; i++) { int j; for (j = 0; j < lie; j++) { printf(" %c ", qi[i][j]); if (j < lie - 1) printf("|"); } printf("\n"); if (i < hang - 1) { for (j = 0; j < lie; j++) { printf("---"); if (j < lie - 1) printf("|"); } printf("\n"); } }

    玩家下一颗子

    void mine(char qi[HANG][LIE], int hang, int lie) { int x, y; printf("你的回合\n"); while (1) { printf("请输入一个位置\n"); scanf_s("%d %d",&x,&y); if (x>=1 && x<=3 && y>=1 && y<=3 && qi[x - 1][y - 1] == ' ') { qi[x - 1][y - 1] = '*'; break; } else printf("输入错误\n"); } }

    电脑下一颗子

    void ai(char qi[HANG][LIE], int hang, int lie) { int x, y; printf("电脑的回合\n"); while (1) { x = rand() % 3; y = rand() % 3; if (x >= 0 && x <= 2 && y >= 0 && y <= 2 && qi[x][y] == ' ') { qi[x][y] = '#'; break; } } }

    靠什么赢

    char duijue(char qi[HANG][LIE], int hang, int lie) { int i,j; int count = 0; for (i = 0; i < hang; i++) { if (qi[0][i] == qi[1][i] && qi[1][i] == qi[2][i] && qi[0][1] != ' ') return qi[0][i]; else if (qi[i][0] == qi[i][1] && qi[i][1] == qi[i][2] && qi[i][0] != ' ') return qi[i][0]; else if (qi[0][0] == qi[1][1] && qi[1][1] == qi[2][2] && qi[0][0] != ' ') return qi[0][0]; else if (qi[0][2] == qi[1][1] && qi[1][1] == qi[2][0] && qi[0][2] != ' ') return qi[0][2]; } for (i = 0; i < hang;i++) for (j = 0; j < lie;j++) if (qi[i][j] != ' ') { count++; } if (count >= hang*lie) return 'q'; }

    来个函数测试一下

    void game() { int set; char qi[HANG][LIE] = { 0 }; chushihua(qi,HANG,LIE); display(qi,HANG,LIE); while (1) { mine(qi, HANG, LIE); display(qi, HANG, LIE); set=duijue(qi, HANG, LIE); //panding(); if (set == '*') { printf("玩家获胜\n"); break; } else if (set == '#') { printf("电脑获胜\n"); break; } else if (set == 'q') { printf("平局\n"); break; } ai(qi, HANG, LIE); display(qi, HANG, LIE); set=duijue(qi, HANG, LIE); if (set == '*') { printf("玩家获胜\n"); break; } else if (set == '#') { printf("电脑获胜\n"); break; } else if (set == 'q') { printf("平局\n"); break; } //panding(); } }

    主函数

    int main() { test(); system("pause"); return 0; }

    头文件

    #define HANG 3 #define LIE 3 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> void chushihua(char qi[HANG][LIE],int hang,int lie); void display(char qi[HANG][LIE], int hang, int lie); void mine(char qi[HANG][LIE], int hang, int lie); void ai(char qi[HANG][LIE], int hang, int lie); char duijue(char qi[HANG][LIE], int hang, int lie);

    easy

    最新回复(0)