首页 > 编程知识 正文

c语言实现三子棋,五子棋游戏

时间:2023-05-03 10:42:35 阅读:211320 作者:1150

这个小游戏的程序由三部分代码组成,分别是头文件,游戏代码和测试代码。

头文件:game.h

#ifndef __GAME_H__#define __GAME_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#define ROW 3#define COL 3void InitBoard(char board[ROW][COL], int row, int col);void DisplayBoard(char board[ROW][COL], int row, int col);void ComputerMove(char board[ROW][COL], int row, int col);void PlayerMove(char board[ROW][COL], int row, int col);char IsWin(char board[ROW][COL], int row, int col);#endif //__GAME_H__

测试代码:test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu()//菜单{ printf("**************************n"); printf("**** 1. play 0. exit ****n"); printf("**************************n");}void game(){int ret = 0;//返回值int num = 0;char board[ROW][COL] = {0};InitBoard(board, ROW, COL); printf("1.玩家先走 2.电脑先走n");printf("请选择;>"); scanf("%d",&num); switch(num){ case 1://选择玩家先走{while(1){DisplayBoard(board, ROW, COL);PlayerMove(board,ROW,COL);ret = IsWin(board,ROW,COL);if(ret != ' ')//棋盘已经走满,进行判断{break;}DisplayBoard(board, ROW, COL);ComputerMove(board,ROW,COL);ret = IsWin(board,ROW,COL);if(ret != ' '){break;}DisplayBoard(board, ROW, COL);}} case 2://选择电脑先走{while(1){ComputerMove(board,ROW,COL);ret = IsWin(board,ROW,COL);if(ret != ' '){break;}DisplayBoard(board, ROW, COL);PlayerMove(board,ROW,COL);ret = IsWin(board,ROW,COL);if(ret != ' '){break;}DisplayBoard(board, ROW, COL);}}default:printf("选择错误!n"); }DisplayBoard(board, ROW, COL);//判断if(ret == 'X')printf("电脑赢!n");else if(ret == 'O')printf("玩家赢!n");else if(ret == 'P')printf("平局!n");}void test(){int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择;>");scanf("%d",&input);switch(input){case 1:game();break;case 0:printf("退出游戏!n");break;default:printf("选择错误!n");}}while(input);}int main(){test();return 0;}

游戏代码:game.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void InitBoard(char board[ROW][COL], int row, int col)//初始化数组{int i = 0;int j = 0; memset(board,' ',row*col*sizeof(board[0][0]));}void DisplayBoard(char board[ROW][COL], int row, int col)//打印棋盘{int i = 0;for(i=0; i<row; i++){int j = 0;for(j=0; j<col; j++){printf(" %c ",board[i][j]);if(j<col-1)printf("|");}printf("n");if(i<row-1){for(j=0; j<col; j++){printf("---");if(j<col-1)printf("|");}}printf("n");}}void ComputerMove(char board[ROW][COL], int row, int col)//电脑走{int x = 0;int y = 0;printf("电脑走n");while(1){x = rand()%row;//随意值 y = rand()%col;if(board[x][y]==' '){board[x][y] = 'X';//电脑走的话输入Xbreak;}}}void PlayerMove(char board[ROW][COL], int row, int col)//玩家走{int x = 0;int y = 0;printf("玩家走n");while(1){printf("请输入坐标:>");scanf("%d %d",&x,&y);if((x>=1 && x<=3) && (y>=1 && y<=3)){if(board[x-1][y-1] == ' '){board[x-1][y-1] = 'O';break;}else{printf("该坐标已被占用!n");}}else{printf("坐标非法!n");}}}char IsWin(char board[ROW][COL], int row, int col){int i = 0;int j = 0;//判断电脑和玩家的输赢for(i=0; i<row; i++){if((board[i][0]==board[i][1]) && (board[i][0]==board[i][2]) && board[i][0]!=' ')return board[i][0];}for(j=0; j<col; j++){if((board[0][j]==board[1][j]) && (board[0][j]==board[2][j]) && board[0][j]!=' ')return board[0][j];}if((board[0][0]==board[1][1]) && (board[1][1]==board[2][2]) && board[1][1]!=' ')return board[0][0];if((board[0][2]==board[1][1]) && (board[1][1]==board[2][0]) && board[1][1]!=' ')return board[1][1];//判断平局if(IsFull(board, ROW, COL)){return 'P';}//游戏继续return ' ';}static int IsFull(char board[ROW][COL], int row, int col)//此函数只在game.c内部使用{int i = 0;int j = 0;for(i=0; i<row; i++){for(j=0; j<col; j++){if(board[i][j]==' ')return 0;}}return 1;}

结果展示:

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。