c語言 三子棋/井字棋 演算法原始碼並講解
用了這好幾天的時間在閒暇時間寫了一個小時候玩的井字棋,或者叫三子棋的小遊戲,來娛樂娛樂,雖然是黑白框,並且電腦有點傻之外,一切良好。
首先寫之前就要先明白思路,這個棋盤要放到一個二維數組裡面這樣才能更好的顯示出來,並且方便操作,先打印出來棋盤這是必須的,這就是基本的二維陣列的列印就好,把棋盤初始化為空格就好了,然後等到走的時候,拿相應的字元來代替就好了;電腦走的話就用隨機數來差生座標就好了,所以才說它傻;
先上程式碼:
標頭檔案 szq.h
<pre name="code" class="cpp">#define _CRT_SECURE_NO_WARNINGS 1 #ifndef __SZQ_GAME_H__ #define __SZQ_GAME_H__ #define ROWS 3 #define COLS 3 void init_board(char board[ROWS][COLS], int rows, int cols); void print_board(char board[ROWS][COLS], int rows, int cols); void play_game(char board[ROWS][COLS]); char check_win(char board[ROWS][COLS]); void player_move(char board[ROWS][COLS]); void com_move(char board[ROWS][COLS]); #endif
#define _CRT_SECURE_NO_WARNINGS 1 #include "szq.h" #include <stdio.h> #include <time.h> #include <stdlib.h> void menu() { printf("*************************\n"); printf("***** 1.play ******\n"); printf("***** 0.exit ******\n"); printf("*************************\n"); } void game() { int input = 1; char board[ROWS][COLS] = { 0 }; init_board(board, ROWS, COLS); while (input) { menu(); printf("請選擇:"); scanf("%d", &input); if (input == 1) { init_board(board, ROWS, COLS); print_board(board, ROWS, COLS); play_game(board); } } } int main() { game(); return 0; }
這樣就結束了,其實原理不復雜,很好相通就是細節還是要注意,細心一點就好。#define _CRT_SECURE_NO_WARNINGS 1 #include "szq.h" #include <stdio.h> #include <stdlib.h> void com_move(char board[ROWS][COLS]) { int x = 0; int y = 0; srand((unsigned)time(NULL)); while (1) { x = rand() % 3; y = rand() % 3; if (board[x][y] == ' ') { board[x][y] = 'O'; return; } } } void player_move(char board[ROWS][COLS]) { int x = 0; int y = 0; while (1) { printf("請輸入座標:"); scanf("%d%d", &x, &y); if (board[x-1][y-1] == ' ') { board[x-1][y-1] = 'X'; return; } else { printf("輸入錯誤"); } } } char check_win(char board[ROWS][COLS]) { int i = 0; for (i = 0; i < 3; i++) { if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' ')) { return 'p'; } } for (i = 0; i < 3; i++) { if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[1][i] != ' ')) { return 'p'; } } if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[1][1] != ' ')) { return 'p'; } if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && (board[1][1] != ' ')) { return 'p'; } } void init_board(char board[ROWS][COLS], int rows, int cols) { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j] = ' '; } } } void print_board(char board[ROWS][COLS], int rows, int cols) { int i = 0; for (i = 0; i < ROWS; i++) { printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]); printf("---|---|---\n"); } } void play_game(char board[ROWS][COLS]) { char ret; int count = 0; while (1) { if (count >= 9) { printf("平局!!!!\n"); break; } player_move(board); count++; print_board(board, ROWS, COLS); if ((ret = check_win(board)) == 'p') { printf("你獲勝了!!!!!\n"); break; } if (count >= 9) { printf("平局!!!!\n"); break; } count++; printf("電腦走:\n"); com_move(board); print_board(board, ROWS, COLS); if ((ret = check_win(board)) == 'p') { printf("呵呵!!!\n"); break; } } }
相關推薦
c語言 三子棋/井字棋 演算法原始碼並講解
用了這好幾天的時間在閒暇時間寫了一個小時候玩的井字棋,或者叫三子棋的小遊戲,來娛樂娛樂,雖然是黑白框,並且電腦有點傻之外,一切良好。 首先寫之前就要先明白思路,這個棋盤要放到一個二維數組裡面這樣才能更好的顯示出來,並且方便操作,先打印出來棋盤這是必須的,
用C語言實現簡單 三子棋(井字棋)小遊戲
函式頭 放在標頭檔案裡 #ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #inc
c語言編程三子棋(井字棋)
客戶 def mem isa memset time 判斷函數 layer 聲明 頭文件(test.h): #ifndef _THREE_CHESS_H_//防止頭文件被重復,包含[也可以用#pragma once] #define _THREE_CHESS_H_ #in
井字棋遊戲C語言簡單思路人人對戰版(無圖形化介面))
#include<stdio.h> #include<stdlib.h> #include<conio.h> #defineROW 3 #defineLINE 3 intsymbol1, symbol2, step; char a[10]; void
[日常練習] 3. 基於井字棋遊戲的C語言實現!
井字棋算是童年課堂上的與同桌默契配合的一大樂趣...躲避著老師“關切”的目光,在眼皮底下“頂風作案”,將“燈下黑”體現的淋漓盡致!在C語言中,也算是一個小的專案,今天,我們就用C語言來實現它!!!追逐童年的一份小樂趣! 遊戲介紹: “井字棋”也稱“三子棋”,需要一個3*3的棋盤。假設
[文件和原始碼分享]C++實現的基於α-β剪枝演算法的井字棋遊戲
“井字棋”遊戲(又叫“三子棋”),是一款十分經典的益智小遊戲,操作簡單,娛樂性強。兩個玩家,一個打圈(O),一個打叉(X),輪流在3乘3的格上打自己的符號,最先以橫、直、斜連成一線則為勝。 如果雙方都下得正確無誤,將得和局。這種遊戲實際上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。 這種遊戲的變
C語言實現井字棋小遊戲
#include <stdio.h> #include <stdlib.h> int store[]={'_','_','_','_','_','_','_','_','_'}, shunt=1, count, i; void pr
Keener_Tic_Tac_Toe(井字棋遊戲)程式碼(c語言)
遇到的問題: 1.中間有需要清楚鍵盤緩衝區,具體(?) 2.number char型,強制int型轉換是利用ASCII碼,相差48. 3.string型c++支援,c並沒有,利用char型字元陣列解決,char player1[20];scanf("%s",player1)
三子棋(井字棋),說沒玩過的都沒童年
這裡我建立了一個“三子棋”的專案,裡面有一個頭檔案game.h和兩個原始檔text.c 、game.c。 "text.c":text.c原始檔放的是main函式,選單列印menu函式和一個遊戲game函式; #include "game.h" void menu
C語言------三子棋
三子棋是一個很簡單的遊戲,用C語言實現,就是實現以下功能: 1.初始化介面(棋盤); 2.顯示介面; 3.玩家和電腦交替走棋; 4.在每次走棋之後判斷是否有人勝利; 5.判斷棋盤是否已下滿棋子。 注:此程式玩家下棋時的座標,就是棋盤實際上顯示的座標,並不需要再進
演算法設計與分析題目練習四:井字棋(啟發式演算法)
井字棋又叫做三連棋或一連棋。顧名思義就是讓三顆棋子連成一條線就獲勝了。國外也有相似的玩法,名字叫tic-tac-toe #include <iostream> #include <string> using namespace std; /*
三子棋,又稱井字棋的實現
編寫一個三子棋你需要知道的是需要哪些實現步驟:首先,你需要有一個棋盤,這樣你就需要編寫一個初始化棋盤的函式,並能夠將棋盤打印出來; 棋盤麼,就像這種樣子: ___|___|___ ___|___|___ | | 這個採用二維陣列就可以來實現了;
C#-wpf一個簡單的井字棋程式
前言 好久沒有碰過程式碼了,上次看C#估計還是上個學期233,這次老師突然佈置了一個C#語言編寫的井字棋程式讓我有點措手不及.不過,仗著微軟爸爸的vs的強大的程式碼補全能力,最後還是將這個程式做好了(遇到了很多坑). 要求 該程式的要求還是有點多了
『HTML5實現人工智慧』小遊戲《井字棋》釋出,據說IQ上200才能贏【演算法&程式碼講解+資源打包下載】
一,什麼是TicTacToe(井字棋)本遊戲為在下用lufylegend開發的第二款小遊戲。此遊戲是大家想必大家小時候都玩過,因為玩它很簡單,只需要一張草稿紙和一隻筆就能開始遊戲,所以廣受兒童歡迎。可能我說了半天,對它名字不熟悉的朋友也不懂我在說神馬。那沒關係,我就引用Wik
Python小遊戲 井字棋(人機對戰,玩家對戰)
pan urn utf-8 erl ext print cef () nbsp # -*- coding:utf-8 -*-import timeimport random#井字棋 人機對戰def drawBoard(board): blank_board = '|
python井字棋算法及代碼
one 鍵盤輸入 有一個 通過 數字鍵盤 boa 簡便 oss range 井字棋盤看起來像一個大的井字符號(#),有9 個空格,可以包含X、O 或關於落子問題由於只能采用鍵盤輸入,所以需要對棋盤進行坐標表示;即直接用1-9個9個數字來表示位置,7|8|9-+-+-4|5|
Unity3d學習之路-簡單井字棋
Unity3d-簡單井字棋 作業目的:熟悉IMGUI的使用,和基礎的Unity3d操作 遊戲玩法:選擇兩個模式,1.Player vs Player 2.Computer vs Player,當其中一種棋子連成三個則這個棋子的玩家獲勝。 技術限制:僅允許使用I
用TensorFlow基於神經網路實現井字棋(含程式碼)
為了展示如何應用神經網路演算法模型,我們將使用神經網路來學習優化井字棋(Tic Tac Toe)。明確井字棋是一種決策性遊戲,並且走棋步驟優化是確定的。 開始 為了訓練神經網路模型,我們有一系列優化的不同的走棋棋譜,棋譜基於棋盤位置列表和對應的最佳落子點。考慮到棋盤的對稱性,通
Python小遊戲----井字棋
週五晚上上了python的選修課,本來以為老師是從python的基礎語法開始的,沒想到是從turtle畫圖開始,正好補上了我以前一些不懂的地方,有人講一下還是比啃書好一點。 之前從圖書館借了一本python遊戲程式設計,看了前面幾章後就沒怎麼看了,晚上突然想看看,然後跟著教
井字棋遊戲實現-java(低階方法實現)
import java.util.Scanner; public class JingGame { final static int LENGTH=3; //棋局的長度 final static int NUM_FOR_WIN=3;//幾個子連起來贏