三子棋(智能版)
来源:互联网 发布:javascript数字格式化 编辑:程序博客网 时间:2024/06/06 00:43
一、应用多文件的方法,把代码分为三部分
1、头文件
2、主函数代码
3、玩游戏过程
二、代码展示
1、头文件
#ifndef __GAME_H__#define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1#define ROW 3#define COL 3#include<stdio.h>#include <stdlib.h>#include <time.h>void start_board(char arr[ROW][COL],int row,int col);void print_board(char arr[ROW][COL],int row,int col);void computer_move(char arr[ROW][COL],int row,int col);void player_move(char arr[ROW][COL],int row,int col);char check_win(char arr[ROW][COL],int row,int col);#endif//__GAME_H__
2、主函数
#include "game.h"void print_menu(){ printf("****************************welcome you !****************************\n"); printf("******************** 1、play 0、exit ********************\n"); printf("****************************good luck !****************************\n");}void game(){ char ret = 0; long input = 0; long flag = 1; char board[ROW][COL]={0}; start_board(board,ROW,COL); printf("******************** 1、computer 2、you ********************\n"); while (flag) //选择谁先走 { printf("please sclect:>"); scanf("%d",&input); if (input==1) { flag=0; goto loop1; } else if(input==2) { print_board(board,ROW,COL); //打印棋盘 flag=0; goto loop2; } else printf("enter error !\n"); } //print_board(board,ROW,COL); do {loop1: printf("computer>:\n"); computer_move(board,ROW,COL); //电脑走 print_board(board,ROW,COL); //打印棋盘 ret = check_win(board,ROW,COL); //判断输赢 { if (ret != 'g') break; }loop2: player_move(board,ROW,COL); //玩家走 print_board(board,ROW,COL); //打印棋盘 ret = check_win(board,ROW,COL); //判断输赢 } while (ret == 'g'); if (ret == '#') { printf("computer win !\n"); } else if (ret=='e') { printf("equal !\n"); } else if (ret=='*') { printf("you win !\n"); }}void test(){ int input = 0; srand((unsigned int)time(NULL)); //产生随机数种子 do { print_menu(); //打印菜单 printf("please select:>"); scanf("%d",&input); switch (input) { case 1: game(); break; case 0: break; default: printf("oh this error!\n"); } } while (input);}int main(){ test(); return 0;}
3、玩游戏过程
#include "game.h"void start_board(char arr[ROW][COL],int row,int col) //初始化数组{ int i = 0; int j = 0; for (i=0; i<row; i++) { for (j=0; j<col; j++) { arr[i][j]=' '; } }}void print_board(char arr[ROW][COL],int row,int col) //打印棋盘{ int i = 0; int j = 0; for (i=0; i<row; i++) { printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]); if (i<row-1) { printf("--- --- ---\n"); } } printf("\n");}void computer_move(char arr[ROW][COL],int row,int col) //电脑走 电脑识别不让对方赢{ int x = 0; int y = 0; int i = 0; int j = 1; if (j==1) { for (i=0; i<row-1; i++) { if (arr[i][0]==arr[i][1] && arr[i][2]==' ' && arr[i][1]!=' ') { arr[i][2]='#'; j=0; break; } } } if (j==1) { for (i=0; i<row; i++) { if (arr[i][1]==arr[i][2] && arr[i][0]==' ' && arr[i][1]!=' ') { arr[i][0]='#'; j=0; break; } } } if (j==1) { for (i=0; i<row; i++) { if (arr[0][i]==arr[1][i] && arr[2][i]==' ' && arr[1][i]!=' ') { arr[2][i]='#'; j=0; break; } } } if (j==1) { for (i=0; i<row; i++) { if (arr[1][i]==arr[2][i] && arr[0][i]==' ' && arr[1][i]!=' ') { arr[0][i]='#'; j=0; break; } } } if (j==1) { for (i=0; i<row; i++) { if (arr[i][0]==arr[i][2] && arr[i][1]==' ' && arr[i][0]!=' ') { arr[i][1]='#'; j=0; break; } } } if (j==1) { for (i=0; i<row; i++) { if (arr[0][i]==arr[2][i] && arr[1][i]==' ' && arr[0][i]!=' ') { arr[1][i]='#'; j=0; break; } } } if(j==0) { goto end; } else if (arr[1][1]==' ') { arr[1][1]='#'; j=0; } else if (arr[0][0]==' '&& (arr[0][1]=='*' || arr[1][0]=='*')) { arr[0][0]='#'; j=0; } else if (arr[0][2]==' '&& (arr[0][1]=='*' || arr[1][2]=='*')) { arr[0][2]='#'; j=0; } else if (arr[2][0]==' ' && (arr[1][0]=='*' || arr[2][1]=='*')) { arr[2][0]='#'; j=0; } else if (arr[2][2]==' ' && (arr[2][1]=='*' || arr[1][2]=='*')) { arr[2][2]='#'; j=0; } else if (arr[0][0]==' ') { arr[0][0]='#'; j=0; } else if (arr[0][2]==' ') { arr[0][2]='#'; j=0; } else if (arr[2][0]==' ') { arr[2][0]='#'; j=0; } else if (arr[2][2]==' ') { arr[2][2]='#'; j=0; } else if(arr[0][0]==arr[1][1] && arr[2][2]==' ' && arr[1][1]!=' ') { arr[2][2]='#'; j=0; } else if (arr[0][2]==arr[1][1] && arr[2][0]==' ' && arr[1][1]!=' ') { arr[2][0]='#'; j=0; } else if (arr[2][0]==arr[1][1] && arr[0][2]==' ' && arr[1][1]!=' ') { arr[0][2]='#'; j=0; } else if (arr[2][2]==arr[1][1] && arr[0][0]==' ' && arr[1][1]!=' ') { arr[0][0]='#'; j=0; } while (j) { x = rand()%row; y = rand()%col; if (arr[x][y]==' ') { arr[x][y]='#'; break; }end:; }}void player_move(char arr[ROW][COL],int row,int col) //玩家走{ int x = 0; int y = 0; while (1) { printf("please player enter:>"); scanf("%d%d",&x,&y); if (x>=1 && x<=3 && y>=1 && y<=3) //判断玩家坐标是否合格 { if (arr[x-1][y-1]==' ') { arr[x-1][y-1]='*'; break; } else { printf("Be occupied!\n"); } } else printf("enter error !\n"); }}char check_full(char arr[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 (arr[i][j]==' ') { return 0; } } } return 1;}char check_win(char arr[ROW][COL],int row,int col) //判断输赢{ int i = 0; for (i=0; i<row; i++) { if (arr[i][0]==arr[i][1] && arr[i][1]==arr[i][2] && arr[i][1] != ' ') { return arr[i][1]; } } for (i=0; i<row; i++) { if (arr[0][i]==arr[1][i] && arr[1][i]==arr[2][i] && arr[1][i] != ' ') { return arr[1][i]; } } if (arr[0][0]==arr[1][1] && arr[1][1]==arr[2][2] && arr[1][1]!=' ') { return arr[1][1]; } else if (arr[0][2]==arr[1][1] && arr[1][1]==arr[2][0] && arr[1][1]!=' ') { return arr[1][1]; } else if(check_full(arr,ROW,COL)) { return 'e'; } else { return 'g'; }}
三、神叨叨,本代码中间有很多需要优化的地方,大家多多指正,欢迎关注,私信。
阅读全文
0 0
- 三子棋(智能版)
- 智能指针(引用计数版)
- 贪吃蛇智能版(中级)
- 贪吃蛇智能版(高级)
- 贪吃蛇智能版(专家)
- 贪吃蛇智能版(初级)
- 字符游戏-智能蛇(代码版)
- 智能纠错【优化版】
- 智能客户端(SmartClient)
- 智能客户端(SmartClient)
- 智能指针(待续)
- 智能指针(smart_pointer)
- 智能车(2)
- BI(商业智能)
- (转载)智能机器人。
- 智能指针(二)
- 智能指针(一)
- 智能指针(二)
- Intellij IDEA 2016.3.4 注册激活
- Leetcode算法学习日志-594 Longest Harmonious Subsequence
- java线程同步工具类总结
- Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上
- 【论文阅读笔记】Deep Learning based Recommender System: A Survey and New Perspectives
- 三子棋(智能版)
- 图像检索:PicSearch is now an open source project
- steam广告
- 【尺取法/二分+优化】Audition SPOJ
- 《C++笔记》 Part7 一维数组与二维数组的初始化问题(vector)
- Java Web应用程序认证 -- 基于JDK7的License开发应用以及认证
- volley post携带参数的问题
- linux安装maven
- ORB_关于对噪声、尺度、旋转的改进