C语言井字棋游戏 发表于 2018-07-16 | 分类 软件&技术 | 评论数: | 阅读次数: C语言练手利用C语言编写的井字棋游戏,界面是由字符串组成,,用到的知识很简单,确是一个很好的练习。可以判断该位置是否有棋子,判断胜负以及利用随机数做了一个傻瓜AI。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185//// main.c// 123//// Created by 刘林 on 2018/7/16.// Copyright © 2018年 刘林. All rights reserved.//#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>int main(){ //定义三个自定义函数,欢迎、游戏和再来一局 void welcome(); void game(); void again(); welcome(); return 0;}//游戏模块void game(){ //定义变量,玩家、获胜者、行、列、选择下棋位置 int player = 0; //玩家 1 或者 2 int winner = 0; // 赢家 int row = 0; // 行 int rank = 0; // 列 int choice = 0; //选择 int ai[9]={};//ai选择列表 char chessboard[3][3]={ {'1','2','3'}, {'4','5','6'}, {'7','8','9'} }; //创建数字棋盘 printf("\n\n我们开始游戏吧!\n\n"); //开始游戏,结束条件为已经下了超过9步或者有获胜者 for (int i = 0;i < 9 && winner == 0 ;i++) { player = (i % 2)+1; //打印初始化棋谱,将创建的数字棋盘中的二位数组带入 printf(" # # \n"); printf(" # # \n"); printf(" %c # %c # %c \n",chessboard[0][0],chessboard[0][1],chessboard[0][2]); printf(" # # \n"); printf(" # # \n"); printf("##############################\n"); printf(" # # \n"); printf(" # # \n"); printf(" %c # %c # %c \n",chessboard[1][0],chessboard[1][1],chessboard[1][2]); printf(" # # \n"); printf(" # # \n"); printf("##############################\n"); printf(" # # \n"); printf(" # # \n"); printf(" # # \n"); printf(" %c # %c # %c \n",chessboard[2][0],chessboard[2][1],chessboard[2][2]); printf(" # # \n"); printf(" # # \n"); //游戏规则说明 if (player == 1) { printf("现在是电脑AI开始下,使用的棋子是%c\n"); printf("正在思考中...\n"); do { srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样 choice = rand() % 10; //产生0-9的随机数 rank = choice % 3; rank--; row = choice /3; } while ((chessboard[row][rank]=='X') || (chessboard[row][rank]=='O') || choice==0); }else{ printf("现在是玩家%d开始下,你使用的棋子是%c\n",player,player == 1?'X':'O'); printf("请根据上面的数字选择下棋位置:\n"); there:scanf("%d",&choice); } //读入下棋位置 rank = choice % 3; rank--; row = choice /3; //*****非法判断***** //1、判断输入的数字是否在9以内 if(choice <1 || choice > 9) { printf("请输入1-9范围内的数字!\n"); goto there; } //2、判断该位置是否已经有棋子 if((chessboard[row][rank]=='X')||(chessboard[row][rank]=='O')) { printf("该位置已经有人下了,请选择其它位置!\n"); goto there; } //*****落子并判断***** //相应的位置落下对应的棋子 chessboard[row][rank] = player == 1?'X':'O'; //判断对角线是否相同 if ((chessboard[0][0] == chessboard[1][1] && chessboard[0][0] == chessboard[2][2])||(chessboard[0][2]==chessboard[1][1]&& chessboard[0][2] == chessboard[2][0])) { winner = player; } //判断每一行 或者每一列是否相同 else { for (int line = 0; line <= 2; line++) { if ((chessboard[line][0]==chessboard[line][1] && chessboard[line][0]==chessboard[line][2])||(chessboard[0][line]==chessboard[1][line] && chessboard[0][line]==chessboard[2][line])) winner = player; } } } //游戏结束 打出最后棋谱 printf("\n\n"); printf(" # # \n"); printf(" # # \n"); printf(" %c # %c # %c \n",chessboard[0][0],chessboard[0][1],chessboard[0][2]); printf(" # # \n"); printf(" # # \n"); printf("##############################\n"); printf(" # # \n"); printf(" # # \n"); printf(" %c # %c # %c \n",chessboard[1][0],chessboard[1][1],chessboard[1][2]); printf(" # # \n"); printf(" # # \n"); printf("##############################\n"); printf(" # # \n"); printf(" # # \n"); printf(" # # \n"); printf(" %c # %c # %c \n",chessboard[2][0],chessboard[2][1],chessboard[2][2]); printf(" # # \n"); printf(" # # \n"); if (winner == 0) { printf("\n\n厉害!厉害!平局!\n"); } else printf("\n\n****恭喜玩家%d,获胜!****\n",winner); again();}//再来一局模块void again(){ printf("\n\n###########################\n"); printf("# #\n"); printf("# 结 束 游 戏 #\n"); printf("# #\n"); printf("###########################\n\n\n"); char start='N'; printf("请输入Y重新开始游戏!\n"); do { start=getchar(); } while (start!='Y'); if (start=='Y') { game(); }}//欢迎界面模块void welcome(){ char start;//开始 //游戏规则 printf("#########################\n"); printf("# #\n"); printf("# 井 字 棋 #\n"); printf("# #\n"); printf("#########################\n"); printf("游戏规则:\n"); printf("欢迎来到井字棋,该游戏有两个玩家,一个打圈(O),一个打叉(✗),轮流在\n3乘3的格上打自己的符号,最先以横、直、斜连成一线则为胜。\n\n"); //进入游戏界面 printf("请输入Y开始游戏!\n"); do { start=getchar(); } while (start!='Y'); if (start=='Y') { game(); }} -------------The End------------- 你可能还喜欢 C语言中操作文件-随机读写数据文件(下)-学习笔记-66 C 语言写猜大小游戏 C语言基本语法-学习笔记-2 C语言复习-常见错误(上)-学习笔记-68 C语言复习-常见错误(下)-学习笔记-69 欢迎请我喝咖啡哦~! 打赏 ─=≡Σ(((つ•̀ω•́)つ))谢谢~ ─=≡Σ(((つ•̀ω•́)つ))谢谢~ 本文作者: Bliner 本文链接: https://www.bliner.me/2018/07/C_language_tic-tac-toe_game/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。尊重个人劳动成果,转载请注明出处。 ─=≡Σ(((つ•̀ω•́)つ)) 返回首页