js網(wǎng)站評(píng)論框小紅書推廣價(jià)目表
思路分析:
1、寫菜單
2、菜單之后進(jìn)入游戲的操作
3、寫函數(shù) 實(shí)現(xiàn)游戲
????????3.1、初始化棋盤函數(shù),使數(shù)組元素都為空格
? ? ? ? 3.2、打印棋盤 棋盤的大概樣子
? ? ? ? 3.3、玩家出棋
? ? ? ? ? ? ? ? 3.3.1、限制玩家要下的坐標(biāo)位置
? ? ? ? ? ? ? ? 3.3.2、判斷玩家要下的位置是否由棋子
? ? ? ? 3.4、電腦出棋
? ? ? ? ? ? ? ? 3.4.1、用隨機(jī)數(shù) 讓電腦隨機(jī)生成坐標(biāo)
? ? ? ? 3.5、判斷玩家和電腦誰贏了
代碼實(shí)現(xiàn)
game.h文件
#ifndef _GAME_H
#define _GAME_H
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>#define ROW 3
#define COL 3
//函數(shù)說明
void 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 ct_move(char board[ROW][COL], int row, int col);
char Iswin(char board[ROW][COL], int row, int col);
#endif
game.c--游戲算法實(shí)現(xiàn)
#include "game.h"
//初始化數(shù)組為 空格
void Initboard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;//遍歷數(shù)組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;for (int i = 0; i < row; i++){int j;for (j = 0; j < col; j++){//打印 空格 數(shù)組元素 空格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 playermove(char board[ROW][COL], int row, int col)
{int x, y;printf("玩家走->:\n");//不到停止條件 一致循環(huán)while (1){printf("請(qǐng)輸入要下的坐標(biāo):\n");scanf("%d %d", &x, &y);//限制坐標(biāo)的范圍if (x >= 1 && x <= row && y >= 1 && y <= col){//確定輸入坐標(biāo)是否有“棋子”if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("該坐標(biāo)被占用!");}}else{printf("坐標(biāo)非法,請(qǐng)重新輸入");}}
}//電腦出棋
void ct_move(char board[ROW][COL], int row, int col)
{int x, y;printf("電腦走->:\n");//用sand函數(shù) 使電腦生成0-2的隨機(jī)數(shù)x = rand() % row;y = rand() % col;while (1){if (board[x][y] == ' '){board[x][y] = '#';break;}}
}//看棋盤是否下滿了
int isfull(char board[ROW][COL], int row, int col)
{int i ,j;for(i = 0;i < row;i++){for(j = 0;j < col;j++){//如果數(shù)組元素中還有 空格 那就返回 0if(board[i][j] == ' '){return 0;} }}return 1;
}//看玩家和電腦誰贏了
char Iswin(char board[ROW][COL], int row, int col)
{int i;//橫相等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][0];}}//豎相等for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[i][0];}}//從左到右 對(duì)角線相等if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}//從右到左 對(duì)角線相等if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//棋盤滿了返回 1 再返回 q 平局if(1 == isfull(board,ROW,COL)){return 'q';}//如果以上條件都不滿足,返回 'c' 表示游戲繼續(xù)進(jìn)行。return 'c';
}
test.c---測(cè)試文件
#include "game.h"
// 菜單欄
void menu()
{printf("=========================\n");printf("=========================\n");printf("========三子棋1.0=========\n");printf("===1 開始游戲==0 退出游戲==\n");printf("=========================\n");
}
// 游戲的算法實(shí)現(xiàn)
void game()
{char ret;// 數(shù)組-存放棋盤信息char board[ROW][COL] = {0};// 初始化棋盤 使所有元素為空格Initboard(board, ROW, COL);// 打印棋盤Displayboard(board, ROW, COL);while (1){// 玩家下棋playermove(board, ROW, COL);// 下完再打印一次棋盤Displayboard(board, ROW, COL);// 判斷玩家是否贏了ret = Iswin(board, ROW, COL);if (ret != 'c'){break;}// 電腦下棋ct_move(board, ROW, COL);Displayboard(board, ROW, COL);// 判斷電腦是否贏了ret = Iswin(board, ROW, COL);/** *玩家贏* #電腦贏* c繼續(xù)游戲* q平局*/// 如果ret 不等于 c 不繼續(xù)游戲 那就break 退出游戲if (ret != 'c'){break;}}if (ret == '*'){printf("玩家贏了\n");}else if (ret == '#'){printf("電腦贏了\n");}else if (ret == 'q'){printf("平局\n");}
}void test()
{menu();int input;do{printf("請(qǐng)選擇:\n 1-> 開始游戲 0-> 退出游戲\n");scanf("%d", &input);switch (input){case 1:printf("game start!\n");game();break;case 0:printf("game over!\n");break;default:printf("無效選項(xiàng),請(qǐng)重新選擇");break;}} while (input);
}
int main(int argc, char const *argv[])
{// 隨機(jī)函數(shù)srand(time(NULL));test();return 0;
}