国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言實現(xiàn)簡單三子棋程序

2020-01-26 13:43:10
字體:
供稿:網(wǎng)友

使用C語言實現(xiàn)簡單的三子棋程序,主要是對二維數(shù)組的運用,我們需要一個頭文件,兩個源文件來實現(xiàn)。

game.h //包含函數(shù)的聲明,宏定義
test.c //包含主函數(shù),函數(shù)調(diào)用
game.c //包含函數(shù)的定義

整體思路

1.要完成一個簡單的三子棋程序,首先需要創(chuàng)建一個二維數(shù)組,并完成數(shù)組初始化。

//使用宏定義定義常量,方便之后對數(shù)組的使用#define ROW 3 //行#define COL 3 //列char arr[ROW][COL] = { 0 };Arr_init(arr, ROW, COL); //數(shù)組初始化

2.完成數(shù)組的初始化后,我們需要將三子棋所需要的棋盤打印出來。

void Print_che(char arr[ROW][COL], int row, int col) //打印棋盤{ int i, j; for(i = 0; i < row; i++) { for(j = 0; j < col; j++) {  printf(" %c ", arr[i][j]);  if (j < col - 1)  printf("|"); } printf("/n"); for(j = 0; j < col ; j++) {  if (i < row - 1)  printf("___");  else  printf(" ");  if (j < col - 1)   printf("|"); } printf("/n"); }}

3.打印完棋盤后,我們就要開始下棋了,為了增加游戲的難度,我們讓電腦先走,電腦走的字符為'0'。

void Computer_walk(char arr[ROW][COL], int row, int col) //電腦走{ int x, y; printf("請電腦輸入坐標/n"); while(1) { x = rand() % row; //生成隨機數(shù) y = rand() % col; if (arr[x][y] == ' ') //判斷坐標正確性 {  arr[x][y] = '0';  break; } }}

4.電腦走完后,輪到玩家走,玩家走的字符為'X'。

void Player_go(char arr[ROW][COL], int row, int col) //玩家走{ int x, y; printf("請玩家輸入坐標:"); while (1) { scanf("%d %d", &x, &y); if ((x > 0 && x <= row + 1) && (y > 0 && y <= col + 1)) //判斷坐標正確性 {  if (arr[x - 1][y - 1] == ' ')  {  arr[x - 1][y - 1] = 'X';  break;  }  else  printf("輸入錯誤,請重新輸入:"); } else  printf("輸入錯誤,請重新輸入:"); }}

5.電腦和玩家每走一次,都需要判斷一次輸贏。

char Judge_win(char arr[ROW][COL], int row, int col) //判斷輸贏{ int i, j; int count = 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][1]; if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][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]; if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ') //反斜相等  return arr[1][1]; } for (i = 0; i < row; i++)//平局 { for (j = 0; j < col; j++) {  if (arr[i][j] == 'X' || arr[i][j] == '0') //遍歷數(shù)組,查看是否還有沒有走的地方  {  count++;  if (count == 9)   return 'Q';  } } } return 'A';}

確定大致思路后,我們完成程序的流程部分,放入我們所創(chuàng)建的文件中。

代碼如下:

game.h //包含函數(shù)的聲明,宏定義

#ifndef _GAME_H__#define _GAME_H__#include <stdio.h>#include <windows.h>#include <stdlib.h>#include <time.h>#define ROW 3 //行#define COL 3 //列void Arr_init(char arr[ROW][COL], int row, int col); //數(shù)組初始化void Print_che(char arr[ROW][COL], int row, int col);//打印棋盤void Player_go(char arr[ROW][COL], int row, int col);//玩家走void Computer_walk(char arr[ROW][COL], int row, int col);//電腦走char Judge_win(char arr[ROW][COL], int row, int col);//判斷輸贏#endif // GAME_H__test.c //包含主函數(shù),函數(shù)調(diào)用#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu() //菜單函數(shù){ printf("********************/n"); printf("**** 1.play ****/n"); printf("**** 0.exit ****/n"); printf("********************/n");}void game() //游戲函數(shù){ char arr[ROW][COL] = { 0 }; Arr_init(arr, ROW, COL); //數(shù)組初始化 Print_che(arr, ROW, COL); //打印棋盤 while(1) { char n; Computer_walk(arr, ROW, COL); //電腦走 Print_che(arr, ROW, COL); n = Judge_win(arr, ROW, COL); //判斷輸贏 if (n == 'X') //根據(jù)判斷輸贏函數(shù)所返回的值做出不同的選擇 {  printf("玩家贏/n");  break; } else if (n == '0') {  printf("電腦贏/n");  break; } else if (n == 'Q') {  printf("平局/n");  break; } else  printf("----------------/n"); Player_go(arr, ROW, COL);//玩家走 Print_che(arr, ROW, COL); n = Judge_win(arr, ROW, COL);//判斷輸贏 if (n == 'X') {  printf("玩家贏/n");  break; } else if (n == '0') {  printf("電腦贏/n");  break; } else if (n == 'Q')  printf("平局/n"); else  printf("------------------/n"); }}void test() //游戲流程函數(shù){ int input = 0; srand((unsigned)time(NULL)); do { menu(); printf("請輸入選擇:"); scanf("%d", &input); switch (input) { case 1:  game();  break; case 0:  break; default:  printf("輸入錯誤,請重新輸入。/n"); } } while (input);}int main(){ test(); system("pause"); return 0;}

game.c //包含函數(shù)的定義

#include "game.h"void Arr_init(char arr[ROW][COL], int row, int col)//數(shù)組初始化{ int i = 0; int j = 0; for(i = 0; i < row; i++) { for(j = 0; j < col; j++)  arr[i][j] = ' '; }}void Print_che(char arr[ROW][COL], int row, int col)//打印棋盤{ int i, j; for(i = 0; i < row; i++) { for(j = 0; j < col; j++) {  printf(" %c ", arr[i][j]);  if (j < col - 1)  printf("|"); } printf("/n"); for(j = 0; j < col ; j++) {  if (i < row - 1)  printf("___");  else  printf(" ");  if (j < col - 1)   printf("|"); } printf("/n"); }}void Player_go(char arr[ROW][COL], int row, int col) //玩家走{ int x, y; printf("請玩家輸入坐標:"); while (1) { scanf("%d %d", &x, &y); if ((x > 0 && x <= row + 1) && (y > 0 && y <= col + 1)) //判斷坐標正確性 {  if (arr[x - 1][y - 1] == ' ')  {  arr[x - 1][y - 1] = 'X';  break;  }  else  printf("輸入錯誤,請重新輸入:"); } else  printf("輸入錯誤,請重新輸入:"); }}void Computer_walk(char arr[ROW][COL], int row, int col) //電腦走{ int x, y; printf("請電腦輸入坐標/n"); while(1) { x = rand() % row; //生成隨機數(shù) y = rand() % col; if (arr[x][y] == ' ') //判斷坐標正確性 {  arr[x][y] = '0';  break; } }}char Judge_win(char arr[ROW][COL], int row, int col) //判斷輸贏{ int i, j; int count = 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][1]; if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][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]; if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ') //反斜相等  return arr[1][1]; } for (i = 0; i < row; i++)//平局 { for (j = 0; j < col; j++) {  if (arr[i][j] == 'X' || arr[i][j] == '0') //遍歷數(shù)組,查看是否還有沒有走的地方  {  count++;  if (count == 9)   return 'Q';  } } } return 'A';}

到這里,我們的程序已經(jīng)完成了,我們看看程序的效果

這里寫圖片描述

這里寫圖片描述

以上就是一個簡單的三子棋程序,多有不足之處,還望指教。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 临夏县| 慈利县| 杨浦区| 清镇市| 德保县| 凉城县| 浙江省| 上犹县| 壤塘县| 天长市| 新乐市| 娱乐| 日照市| 雷山县| 郯城县| 锡林郭勒盟| 若尔盖县| 平顶山市| 麻阳| 武义县| 抚远县| 浠水县| 从江县| 通道| 平凉市| 诸暨市| 于都县| 西乌珠穆沁旗| 德令哈市| 普洱| 龙里县| 金乡县| 高阳县| 资中县| 垣曲县| 沭阳县| 和静县| 海淀区| 吴忠市| 蓬安县| 丹东市|