三子棋(c语言) 棋盘大小可随意
来源:互联网 发布:php开发实例大全 编辑:程序博客网 时间:2024/06/10 11:06
game.h#ifndef __GAME_H__#define __GAME_H__#include <string.h>#include <stdlib.h>#include <time.h>#include <stdio.h>#define ROW 6#define COL 6void InitBoard(char board[ROW][COL], int row, int col);void DisplayBoard(char board[ROW][COL], int row, int col);void PlayerMove(char board[ROW][COL], int row, int col);void Computermove(char board[ROW][COL], int row, int col);char IsWin(char board[ROW][COL], int row, int col);#endif //__GAME_H__game.c#define _CRT_SECURE_NO_WARNINGS#include "game.h"void InitBoard(char board[ROW][COL], int row, int col) //初始化棋盘{ int i = 0; int j = 0; for(i=0;i<row;i++) { for(j=0;j<col;j++) { board[i][j] = ' '; } }}void DisplayBoard (char board[ROW][COL], int row, int col) //打印显示棋盘{ /*int i=0; for(i=0;i<row;i++) { printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]); if(i<(row-1)) { printf("---|---|---\n"); } }*/ int i = 0; for(i=0;i<row;i++) { int j = 0; for(j=0;j<col;j++) { printf(" %c |",board[i][j]); } printf("\n"); for(j=0;j<col;j++) { if(i<(row-1)) { printf("---|"); } } printf("\n"); }}void PlayerMove(char board[ROW][COL], int row, int col) //玩家走的函数{ int x = 0; int y = 0; while(1) { printf("玩家走,请输入横纵坐标》\n"); scanf("%d%d",&x,&y); if((x>=0 && x<=row) && (y>=0 && y<=col)) { if(board[x-1][y-1] == ' ') { board[x-1][y-1]='x'; break; } else { printf("此处已走过,请重新走\n"); } } else { printf("输入有误,请重新输入\n"); } }}void Computermove(char board[ROW][COL], int row, int col) //电脑走的函数{ while (1) { int x = rand()%3; int y = rand()%3; if(board[x][y] == ' ') { board[x][y]='0'; break; } }}static int is_full(char board[ROW][COL], int row, int col){ 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; //棋盘已满 }char IsWin (char board[ROW][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][0] != ' ') // { // return board[i][0]; // } //} //for(i=0;i<col;i++) //纵向三子赢了 //{ // if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') // { // return board[0][i]; // } //} ////斜向三子赢了 //if(board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') //{ // return board[1][1]; //} //if(board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') //{ // return board[1][1]; //} //玩家赢 电脑赢 int i = 0; int j = 0; for(i=0;i<row;i++) //横向三子赢了 { for(j=0;j<col;j++) { if( (board[i][j] == board[i][j+1] && board[i][j+1] == board[i][j+2] && board[i][i] != ' ')|| (board[i][j] ==board[i][j-1] && board[i][j-1] == board[i][j+1] && board[i][i] != ' ')|| (board[i][j] == board[i][j-1] && board[i][j-1] == board[i][j-2] && board[i][i] != ' ') ) { return board[i][j]; } if( (board[i][j] == board[i+1][j] && board[i+1][j] == board[i+2][j] && board[i][j] != ' ')|| (board[i][j] == board[i+1][j] && board[i+1][j] == board[i-1][j] && board[i][j] != ' ')|| (board[i][j] == board[i-1][j] && board[i-1][j] == board[i-2][j] && board[i][j] != ' ')) { return board[i][j]; } //斜向三子赢了 if((board[i][j] == board[i-1][j+1] && board[i-1][j+1] == board[i+1][j-1] && board[i][j] != ' ')|| (board[i][j] == board[i-1][j+1] && board[i-1][j+1] == board[i+1][j-1] && board[i][j] != ' ')|| (board[i][j] == board[i+1][j-1] && board[i+1][j-1] == board[i+2][j-2] && board[i][j] != ' ') ) { return board[i][j]; } if( (board[i][j] == board[i+1][j+1] && board[i+1][j+1] == board[i+2][j+2] && board[i][j] != ' ')|| (board[i][j] == board[i-1][j-1] && board[i-1][j-1] == board[i+1][j+1] && board[i][j] != ' ')|| (board[i][j] == board[i-1][j-1] && board[i-1][j-1] == board[i-2][j-2] && board[i][j] != ' ')) { return board[i][j]; } } } if(is_full(board,row,col)) { return 'Q'; //平局 } return ' '; //继续游戏}test.c#define _CRT_SECURE_NO_WARNINGS#include "game.h"void menu() //打印菜单 { printf("*****************************\n"); printf("*** 欢迎进入三子棋界面 ****\n"); printf("*****************************\n"); printf("**** 1 play 0 exit ****\n"); printf("*****************************\n");}void game(){ char win = 0; int c; char board[ROW][COL]={0}; InitBoard(board,ROW,COL); DisplayBoard(board,ROW,COL); printf("1 玩家先走 2 电脑先走 0 退出游戏\n"); scanf("%d",&c); switch (c) { case 1: printf("玩家先走:\n"); PlayerMove(board,ROW,COL); DisplayBoard(board,ROW,COL); win = IsWin(board,ROW,COL); if(win != ' ') { break; } case 2: printf("电脑先走:\n"); Computermove(board,ROW,COL); DisplayBoard(board,ROW,COL); win = IsWin(board,ROW,COL); if(win != ' ') { break; } } while (1) { printf("玩家走》\n"); PlayerMove(board,ROW,COL); DisplayBoard(board,ROW,COL); win = IsWin(board,ROW,COL); if(win != ' ') { break; } printf("电脑走》\n"); Computermove(board,ROW,COL); DisplayBoard(board,ROW,COL); win = IsWin(board,ROW,COL); if(win != ' ') { break; } } if(win == 'x') { printf("玩家赢了\n"); } else if(win == '0') { printf("电脑赢了\n"); } else { 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(); system("pause"); return 0;}
阅读全文
0 0
- 三子棋(c语言) 棋盘大小可随意
- 随意大小的菱形打印c程序(Windows可运行),水平太差,无线for循环
- 【c语言】棋盘游戏--三子棋
- C语言学习.随意纪录
- C语言:3*3棋盘实现三子棋
- c语言棋盘游戏
- 【C语言】 棋盘游戏
- 三星研制变形透明显示屏可随意调整大小(图)
- 分治算法中棋盘覆盖问题(c语言实现)
- C语言实现小游戏(三) 3*3棋盘游戏
- 三子棋源代码 可运行 c语言
- C语言期末考试代码(可运行)
- C语言(指针变量的大小)
- 获得文件的大小(c语言)
- C语言大小端
- C语言数据大小
- C语言大小端
- 棋盘覆盖问题(分治)(C语言)
- 用python修改dns解析文件
- 12.12笔记
- 专项支出用款申请单:全民学Excel第六季
- Mathematical Statistics and Data Analysis笔记
- JAVA项目工程导入.jar包
- 三子棋(c语言) 棋盘大小可随意
- CNN 卷积神经网络结构
- Effective Java之通过私有构造器强化不可实例化能力(四)
- webService的常见的调用和发布
- 使用http调用java后台接口
- 引入极线约束的surf特征匹配
- codeforces Unusual Sequences (数论)
- java.io.File中mkdir()和mkdirs()的区别
- 《20171210》