【c语言】棋盘游戏--三子棋
生活随笔
收集整理的這篇文章主要介紹了
【c语言】棋盘游戏--三子棋
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、問題概述
大家都玩過棋盤游戲吧,像五子棋一樣,玩家或者是電腦一人下一次,當玩家或者是電腦的某一方先將各自的五個棋子下成一條線時,誰就贏,棋盤游戲就會結束。
? ? ? ? ? ? ? ? ? ? ? ? ? ?
當然,我今天要介紹的是三子棋,和五子棋的原理是一樣的,當玩家或者是電腦的某一方先將各自的三個棋子下成一條線時,誰就贏,棋盤游戲就會結束。
下面我們用如下棋盤模擬一下電腦上的棋盤:
? ?? ?
有一點點小,不要嫌棄哈。這就是初始的棋盤。那些空格的位置就是需要下棋的地方。
二、解決方案
(1)初始化棋盤,將棋盤可以要下的地方初始化為空格,這里我們用二維數組來存放這些空格,以便后邊的替換;
(2)開始游戲時,先讓玩家玩,輸入玩家要下的坐標,然后讓電腦玩,給定隨機的坐標即可。
(3)當三個坐標成一條直線時,則下的那一方就贏。(判斷坐標成一線)
三、實現代碼
//ThreeChess.h
#define _CRT_SECURE_NO_WARNINGS 1 #pragma once #define Row 3 #define Col 3 #include<string.h> #include<time.h> #include<stdlib.h> #include<stdio.h>//打印棋盤 void PrintChess(char arr[][Col],int row) {printf("%c|%c|%c\n",arr[0][0],arr[0][1],arr[0][2]);printf("------\n");printf("%c|%c|%c\n",arr[1][0],arr[1][1],arr[1][2]);printf("------\n");printf("%c|%c|%c\n",arr[2][0],arr[2][1],arr[2][2]); }//玩家下棋 void Player(char arr[][Col],int row) {int x = 0;int y = 0;printf("玩家玩\n");printf("請輸入坐標:>");scanf("%d%d",&x,&y);x = x-1;y = y-1;while(arr[x][y] != ' '){printf("輸入數據不合法,請重新輸入!\n");printf("請輸入坐標:>");scanf("%d%d",&x,&y);x = x-1; //現實中的坐標和計算機中的坐標相差1,所以橫縱坐標各減1y = y-1;}if(arr[x][y] == ' '){arr[x][y] = '*';}PrintChess(arr,row); }//電腦下棋 void Computer(char arr[][Col],int row) {int x = rand()%row;int y = rand()%Col;printf("電腦玩\n");while(arr[x][y] != ' '){x = rand()%row;y = rand()%Col;}if(arr[x][y] == ' '){arr[x][y] = '#';}PrintChess(arr,row); }int Check(char arr[][Col]) {int j = 0;int i = 0;int count = 0;//判斷是否三個坐標為一條線for(i = 0;i < 3;i++){if((((arr[i][0] == arr[i][1])&&(arr[i][1] == arr[i][2]))&&(arr[i][1]== '*')) ||(((arr[0][i] == arr[1][i])&& (arr[1][i]== arr[2][i]))&&(arr[1][i]== '*')) ||(((arr[0][0] == arr[1][1])&&(arr[1][1]== arr[2][2]))&&(arr[1][1]== '*')) ||(((arr[0][2] == arr[1][1])&&(arr[1][1]== arr[2][0]))&&(arr[1][1]== '*'))){ return 1; }if((((arr[i][0] == arr[i][1])&&(arr[i][1] == arr[i][2]))&&(arr[i][1]== '#')) ||(((arr[0][i] == arr[1][i])&& (arr[1][i]== arr[2][i]))&&(arr[1][i]== '#')) ||(((arr[0][0] == arr[1][1])&&(arr[1][1]== arr[2][2]))&&(arr[1][1]== '#')) ||(((arr[0][2] == arr[1][1])&&(arr[1][1]== arr[2][0]))&&(arr[1][1]== '#'))){ return -1; }for(j = 0; j < 3;j++){if(arr[i][j] != ' '){count++;}}}if(count == 9){printf("平局\n");}}void Game() {char arr[Row][Col];int i = 0;int j = 0;memset(arr,' ',sizeof(char)*Row*Col);PrintChess(arr,Row);while(1){Player(arr,Row);if(Check(arr) == 1){printf("玩家贏!\n");return;}Computer(arr,Row);if(Check(arr) == -1){printf("電腦贏!\n");return;}} }
//ThreeChess.c
#include"ThreeChess.h" #define _CRT_SECURE_NO_WARNINGS 1void FunTest() {int select = 0;while(1){printf("------------------------------------\n");printf("------------- 1. play---------------\n");printf("------------- 2. exit---------------\n");printf("請選擇:>\n");scanf("%d",&select);switch(select){case 1:Game();break;case 2:return;default:break;}} }int main() {FunTest();return 0; }
四、運行結果
總結
以上是生活随笔為你收集整理的【c语言】棋盘游戏--三子棋的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育基地买票要身份证吗
- 下一篇: 关东大先生剧情介绍