c/c++开发分享C语言实现三子棋游戏附注释实例为大家分享了c语言实现三子棋游戏的具体代码,供大家参考,具体内容如下
概述
三子棋棋盘为九宫格形式,玩家和电脑分别轮流落子,若有一方有三个棋连在一起的情况则胜。
实现过程
1、玩家交互菜单创建
2、棋盘创建与初始化
3、玩家与电脑落子
4、判定胜负关系
多文件实现
头文件 game.h
#ifndef __game_h__ #define __game_h__ #include <stdio.h> #include <time.h> #include <stdlib.h> #include <windows.h> #define row 3 #define col 3 #define init ' ' //宏定义 空 #define white 'x' //player #define black 'o' //computer #define draw 'd' #define next 'n' #pragma warning(disable:4996) extern void game(); #endif
源文件 main.c
#include "game.h" void menu() { printf("+-------------------------------+n"); printf("| 1. play 0. exit |n"); printf("+-------------------------------+n"); } int main() { int select = 0; int quit = 0; while (!quit) { menu(); printf("please select# "); scanf("%d", &select); switch (select){ case 1: game(); break; case 0: quit = 1; break; default: printf("enter error, try again!n"); break; } } printf("byebye!n"); system("pause"); return 0; }
源文件game.c
#include "game.h" static void initboard(char board[][col], int row, int col) //对九宫格棋盘进行初始化 { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) //双重循环 二维数组 矩阵 { board[i][j] = init; //init宏定义为空 } } } static void showboard(char board[][col], int row, int col) //函数 打印棋盘 { system("cls"); //调用dos命令窗口进行清屏操作,实现刷新棋盘 printf(" "); for (int i = 0; i < col; i++) { printf("%4d", i+1); } printf("n--------------n"); for (int i = 0; i < row; i++) { printf("%-2d", i+1); //2 for (int j = 0; j < col; j++) { printf("| %c ", board[i][j]); //12 } printf("n--------------n"); } } static char isend(char board[][col], int row, int col) { for (int i = 0; i < row; i++) //判断每列是否有三子连线 { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != init) { return board[i][0]; } } for (int j = 0; j < col; j++) 判断每行是否有三子连线 { if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != init) { return board[0][j]; } } if (board[0][0] == board[1][1] && //判断右对角线是否三子连线 board[1][1] == board[2][2] && board[1][1] != init) { return board[1][1]; } if (board[0][2] == board[1][1] && //判断左对角线是否三子连线 board[1][1] == board[2][0] && board[1][1] != init) { return board[1][1]; } for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] == init) //判空 { return next; } } } return draw; //平局 } static void playermove(char board[][col], int row, int col) //玩家落子 { int x = 0; int y = 0; //定义<x,y>坐标方式实现玩家落子 while (1) { printf("please enter position <x,y># "); scanf("%d %d", &x, &y); if (x < 1 || y < 1 || x > 3 || y > 3) //非法判断 { printf("enter position error!n"); continue; } if (board[x - 1][y - 1] == init) //当前位置为空方可落子 { board[x - 1][y - 1] = white; break; } else { printf("position is not empty!n"); } } } static void computermove(char board[][col], int row, int col) //电脑落子 { while (1){ int x = rand() % row; int y = rand() % col; //利用随机数种子 实现电脑落子 if (board[x][y] == init){ board[x][y] = black; break; } } } void game() { char board[row][col]; //棋盘定义 initboard(board, row, col); //棋盘初始化 srand((unsigned long)time(null)); //生成随机数种子 char result = 0; while (1){ showboard(board, row, col); //显示棋盘 playermove(board, row, col); //玩家落子 result = isend(board, row, col); //判断游戏状态 if (result != next){ break; } showboard(board, row, col); //显示棋盘 computermove(board, row, col); //电脑落子 result = isend(board, row, col); //判断游戏状态 if (result != next){ break; } } showboard(board, row, col); switch (result){ case white: printf("you win!n"); break; case black: printf("you lose!n"); break; case draw: printf("you == computer!n"); break; default: printf("bug!n"); //do nothing! break; } }
三种结果展示
以上就是c/c++开发分享C语言实现三子棋游戏附注释的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。
需要了解更多c/c++开发分享C语言实现三子棋游戏附注释,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/636263.html