C语言小游戏----三子棋

来源:互联网 发布:金山软件管家官方 编辑:程序博客网 时间:2024/06/05 20:12

三子棋大家可能都不陌生

三子棋,民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。(摘自 搜狗百科)


今天就给大家带来一个用C语言数组知识编写的“三子棋”小游戏;

利用二维数组可以组成一个二维坐标面,用来建立棋盘,通过对数组元素的操作达到对棋子的操控

首先游戏的初始化界面


进入游戏后主菜单选择界面


然后进行模式选择,人机对战或者人人对战




源码:

game.h用来对我们需要使用的函数进声明

#ifndef __GAME_H__#define __GAME_H__#define RCW 3#define COL 3#include<string.h>#include<stdio.h>#include<stdlib.h>#include<Windows.h>#include<time.h>void welcome();//初始化界面void menu();//主菜单界面void menuone();//模式选择菜单界面void printboard(char board[RCW][COL], int rcw, int col);//打印棋盘void game();//开始游戏void game1();//人机对战void game2();//人人对战void Manplay1(char board[RCW][COL], int rcw, int col);//玩家一下棋void Manplay2(char board[RCW][COL], int rcw, int col);//玩家二下棋void Computerplay(char board[RCW][COL], int rcw, int col);//电脑下棋char CheckWin(char board[RCW][COL], int row, int col); // 判断输赢#endif    //__GAME_H__


game.c用来对我们的函数进行定义

#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"//包含game.h头文件void welcome()//初始化 欢迎界面{printf("                                 \n");printf("       欢迎试玩三子棋游戏        \n");printf("      测试版 * 版本号 1.1.0      \n");printf("      制作人:  Edision Niu      \n");printf("*******游戏中如遇BUG请反馈*******\n");printf("                                 \n");printf("游戏已加载完毕,请按任意键继续......\n");getchar();system("cls");//清屏}void menu()//主菜单{printf("********************************\n");printf("** 0.退出游戏 **** 1.开始游戏 **\n");printf("********************************\n");}void menuone()//游戏模式选择菜单{printf("********************************\n");printf("** 1.人机对战 **** 2.人人对战 **\n");printf("** 0.返回上一菜单 **************\n");printf("********************************\n");}void printboard(char board[RCW][COL], int rcw, int col)//打印棋盘{int i = 0;for (i = 0; i < rcw; i++){printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]);if (i != 2)printf("|---|---|---|\n");}}void game()//游戏模式选择{int input = 0;do{menuone();printf("请选择:");scanf("%d", &input);system("cls");switch (input){case 1:game1();//人机对战break;case 2:game2();//人人对战break;case 0:break;default:printf("输入错误!\n");break;}} while (input);}void game1()//人机对战{char board[RCW][COL] = { 0 };memset(board, ' ', RCW*COL * sizeof(board[0][0]));int i = 9;while(1){if (i <= 0)break;Manplay1(board, RCW, COL);i--;if (CheckWin(board, RCW, COL) == 'X'){printf("玩家获胜!\n");goto flag3;}printboard(board, RCW, COL);printf("电脑下棋....\n");Sleep(1000);if (i <= 0)break;Computerplay(board, RCW, COL);i--;if (CheckWin(board, RCW, COL) == '0'){printf("电脑获胜!\n");goto flag3;}printboard(board, RCW, COL);}printf("平局\n");flag3:printboard(board, RCW, COL);}void game2()//人人对战{char board[RCW][COL] = { 0 };memset(board, ' ', RCW*COL * sizeof(board[0][0]));int i = 9;while (1){printf("玩家X下棋....\n\n");if (i <= 0)break;Manplay1(board, RCW, COL);i--;if (CheckWin(board, RCW, COL) == 'X'){printf("玩家X获胜!\n");goto flag4;}printboard(board, RCW, COL);printf("玩家0下棋....\n\n");if (i <= 0)break;Manplay2(board, RCW, COL);i--;if (CheckWin(board, RCW, COL) == '0'){printf("玩家0获胜!\n");goto flag4;}printboard(board, RCW, COL);}printf("平局\n");flag4:printboard(board, RCW, COL);}void Manplay1(char board[RCW][COL], int rcw, int col)//玩家1下棋{int x = 0;int y = 0;printf("请输入你要下的位置:");flag1:scanf("%d%d", &x, &y);if (x > rcw || y > col || x < 0 || y < 0||(board[x - 1][y - 1] != ' ')){printf("该位置无效,请重新输入:");goto flag1;}board[x - 1][y - 1] = 'X';}void Manplay2(char board[RCW][COL], int rcw, int col)//玩家2下棋{int x = 0;int y = 0;printf("请输入你要下的位置:");flag3:scanf("%d%d", &x, &y);if (x > rcw || y > col || x < 0 || y < 0 || (board[x - 1][y - 1] != ' ')){printf("该位置无效,请重新输入:");goto flag3;}board[x - 1][y - 1] = '0';}void Computerplay(char board[RCW][COL], int rcw, int col)//电脑下棋{int x = 0;int y = 0;flag2:x = rand() % 3;y = rand() % 3;if (board[x][y] != ' ')goto flag2;board[x][y] = '0';}char CheckWin(char board[RCW][COL], int row, int col)//判断游戏结果{int i = 0;for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')return board[i][1];}for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')return board[1][i];}if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')return board[1][1];if (board[0][2] == board[1][1] && board[2][0] == board[1][1] && board[1][1] != ' ')return board[1][1];return 0;}


Three - chess game.c用来存放主函数

#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"//包含game.h头文件int main(){int input = 0;welcome();//system("color f0");srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d", &input);system("cls");switch (input){case 1:game();break;case 0:printf("退出游戏!\n");break;default:printf("输入错误!\n");break;}} while (input);system("pause");return 0;}

以上是 三子棋小游戏的源代码,有兴趣的可以参考源代码自己编写自己的三子棋




目前这个版本的三子棋 电脑下法是采用随机的点进行下棋,有能力或者有兴趣的可以对电脑下棋部分的代码进行一个改进,使电脑的下法更智能




原创粉丝点击