1. 程式人生 > >c語言 三子棋/井字棋 演算法原始碼並講解

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;//幾個子連起來贏