自拟三子棋小游戏
来源:互联网 发布:淘宝买的袖剑能杀人吗 编辑:程序博客网 时间:2024/06/06 08:58
头文件部分:
#ifndef _SANZIQI_H__#define _SANZIQI_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3#define LINE 3void init_board(char arr[ROW][LINE]); //初始化棋盘int check_full(char arr[ROW][LINE]); //检查某个位置是否为空void display_board(char arr[ROW][LINE]); //打印棋盘void player_move(char arr[ROW][LINE]); //玩家玩void computer_move(char arr[ROW][LINE]); //电脑玩char check_win(char arr[ROW][LINE]); //判断输赢#endif //_SANZIQI_H__
主函数部分:
#define _CRT_SECURE_NO_WARNINGS 1#include"sanziqi.h"void menu(){ printf("**********1.玩游戏**********\n"); printf("**********0.退出游戏********\n");}void game(){char ret = 0;char arr[ROW][LINE] = {0}; init_board(arr);do { display_board(arr);player_move(arr);ret=check_win(arr);if( ret != ' ')break;if(check_full(arr)==1)//棋盘已满{ret='q';break;}computer_move(arr);ret=check_win(arr);if( ret != ' ')break;if(check_full(arr)==1)//棋盘已满{ret='q';break;}}while(ret == ' ');display_board(arr);if(ret == 'A'){printf("玩家赢得游戏\n");}else if(ret == 'B'){printf("电脑赢得游戏\n");}else if(ret == 'q'){printf("平局\n");}}int main(){int input = 1;while(input) { menu();printf("请输入你的选择:");scanf("%d",&input);switch(input){case 1: game(); break;case 0:break;default:printf("选择错误\n");break;}}system("pause");return 0;}
代码实现部分:
#define _CRT_SECURE_NO_WARNINGS 1#include"sanziqi.h"void init_board(char arr[ROW][LINE]){ int i = 0; int j = 0; for(i = 0; i<ROW; i++) { for(j = 0; j<LINE; j++) { arr[i][j]=' '; } }}int check_full(char arr[ROW][LINE]){ int i = 0; int j = 0; for(i = 0; i<ROW; i++) { for(j = 0; j<LINE; j++) { if(arr[i][j]==' ')//棋盘未满 return -1; } } return 1;//棋盘已满}void display_board(char arr[ROW][LINE]){ int i = 0; for(i = 0; i<ROW; i++) { printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]); if(i != 2) { printf("---|---|---\n"); } }}void player_move(char arr[ROW][LINE]){int x = 0;int y = 0;while(1){ printf("请输入坐标(注意行和列的范围1到3):"); scanf("%d%d",&x,&y); x--; y--; if(x>=0 && x<ROW && y>=0 && y<ROW) { if(arr[x][y] == ' ') {arr[x][y] = 'A';break; } else { printf("输入的坐标已被占用,请重新输入\n"); player_move(arr); }}}}void computer_move(char arr[ROW][LINE]){ int x = 0;int y = 0;srand((unsigned int)time(NULL));while(1){ x = rand() % ROW; y = rand() % ROW; if(arr[x][y] == ' ') {arr[x][y] = 'B';break; } else { if(check_full(arr)==1) break; else continue; }}}char check_win(char arr[ROW][LINE])/*游戏中判断输赢,返回一个char类型的值*/{ int i = 0; for(i = 0; i<ROW; i++)//行相同 { if((arr[i][0]==arr[i][1]) && (arr[i][1]==arr[i][2]) && arr[i][0]!=' ') return arr[i][0]; } for(i = 0; i<LINE; i++)//列相同 { if((arr[0][i]==arr[1][i]) && (arr[1][i]==arr[2][i]) && arr[0][i]!=' ') return arr[0][i]; } if((arr[0][0]==arr[1][1]) && (arr[1][1]==arr[2][2]) && arr[0][0]!=' ')//主对角线相同 { return arr[0][0]; } if((arr[0][2]==arr[1][1]) && (arr[1][1]==arr[2][0]) && arr[0][2]!=' ' )//副对角线相同 { return arr[0][2]; }return ' ';//没赢}
运行结果:
要细心,要细心,要细心!!!
1 0
- 自拟三子棋小游戏
- Emacs自带小游戏
- Emacs自带的小游戏
- 用Visual Basic自编小游戏
- 找回win7系统自带小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- 小游戏
- GNSS信号捕获(1)
- C#编码规范
- 地质年代
- Java annotation详解
- c# - 反序列化报错:Input string was not in a correct format
- 自拟三子棋小游戏
- 生产者消费者问题(代码实现)
- Object类-----简单描述
- 解决studio导入eclipse乱码问题
- 华为支持ONOS@IETF Hackathon——标准与开源的完美邂逅
- PULL解析XML小实例
- Java烧脑驴游(十三)--方法
- iOS开发 - 第04篇 - 网络 - 07 - JS & jQuery & UIWebView和JS交互
- ubuntu彻底卸载软件