c語言 寫一個五子棋

c語言

IsWin判贏

display 畫 10 x 10 的棋盤

判斷落子的坐標是否已有棋子

判斷落子坐標范圍是否超出范圍

// 五子棋
#include <stdio.h>
#include <stdlib.h>// 畫棋盤 10 x 10的棋盤,len為行數
void display(char map[][10], int len)
{system("clear");printf("   0 1 2 3 4 5 6 7 8 9\n");for (int i = 0; i < len; i++) {printf("%d ", i);for (int j = 0; j < 10; j++) {printf("|%c", map[i][j]);}printf("|\n");}
}// 判斷是否贏棋
int IsWin(char map[][10], int len, int x, int y)
{int xx;int yy;int saves = 0;int count = 1;// 判斷是否棋盤下滿for (int i = 0; i < len; i++) {for (int j = 0; j < 10; j++) {if (map[i][j] == ' ') {saves += 1;}}}if (saves == 0) {printf("棋盤下滿,平局!\n");return -1;}//判斷贏棋,從橫、縱、斜、反斜四個方向判斷// 橫向判斷// count == 1 是因為下面 for循環判斷是從坐標的橫移左一個、橫移右一個開始判斷的for (yy = y-1; yy > -1; yy--) {if (map[x][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (yy = y+1; yy < 10; yy++) {if (map[x][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋贏\n");return 1;} else {printf("黑棋贏\n");return 2;}}count = 1;// 縱向判斷for (xx = x-1; xx > -1; xx--) {if (map[xx][y] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (xx = x+1; xx < len; xx++) {if (map[xx][y] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋贏\n");return 1;} else {printf("黑棋贏\n");return 2;}}count = 1;// 反斜方向判斷for (xx = x-1,yy = y + 1; xx > -1 && yy < 10; xx--,yy++) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (xx= x+1,yy = y-1; xx < len && yy > -1; yy--,xx++) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋贏\n");return 1;} else {printf("黑棋贏\n");return 2;}}count = 1;// 斜線 方向判斷for (xx = x-1,yy = y - 1; xx > -1 && yy > -1; xx--,yy--) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (xx= x+1,yy = y+1; xx < len && yy < 10; yy++,xx++) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋贏\n");return 1;} else {printf("黑棋贏\n");return 2;}}return 0;
}int main(void)
{char map[10][10] = {};for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {map[i][j] = ' ';}}display(map, 10);int x = 0, y = 0,ret = -1;while (1) {while (1) {printf("白旗落子\n"); // 'O'printf("請輸入橫坐標:");scanf("%d", &x);printf("請輸入縱坐標:");scanf("%d", &y);if (x >= 0 && x <= 9 && y >=0 && y <= 9) {if (map[x][y] != ' ') {printf("該坐標已落子,請重新輸入坐標\n");continue;} else {map[x][y] = 'O';display(map, 10);break;}}else {printf("輸入坐標超出棋盤范圍,請重新輸入\n");continue;}}ret = IsWin(map, 10, x, y);if (ret != 0) {break;}while (1) {printf("黑旗落子\n"); // 'X'printf("請輸入橫坐標:");scanf("%d", &x);printf("請輸入縱坐標:");scanf("%d", &y);if (x >= 0 && x <= 9 && y >=0 && y <= 9) {if (map[x][y] != ' ') {printf("該坐標已落子,請重新輸入坐標!\n");continue;} else {map[x][y] = 'X';display(map, 10);break;}}else {printf("輸入坐標超出棋盤范圍,請重新輸入!\n");continue;}}ret = IsWin(map, 10, x, y);if (ret != 0) {break;}}return 0;
}    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906538.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

格雷希爾快速封堵接頭,解決新能源汽車的氣密性檢測和三電系統的綜合測試

我國的新能源汽車已經遙遙領先&#xff0c;讓其他國家望塵莫及。格雷希爾GripSeal&#xff0c;為新能源汽車制造業提供快速可靠的密封連接器&#xff0c;讓測試速度加倍。以好抓取、易密封為設計理念&#xff0c;實現一秒連接&#xff0c;瞬時密封的高效性能。通過持續的產品設…

人工智能全景解析:從技術原理到未來趨勢的深度探索

人工智能(AI)作為21世紀最具變革性的技術之一&#xff0c;正以前所未有的速度重塑著人類社會。從智能手機中的語音助手到工廠里的智能機器人&#xff0c;從醫療診斷系統到金融風控模型&#xff0c;AI技術已滲透到我們生活和工作的方方面面。本文將全面解析人工智能的發展歷程、…

[密碼學實戰]使用C語言實現TCP服務端(二十九)

[密碼學實戰]使用C語言實現TCP服務端(二十九) 引言 TCP(傳輸控制協議)是互聯網通信中最核心的協議之一,它提供可靠的、面向連接的數據傳輸服務。通過C語言的標準Socket API,開發者可以靈活地實現TCP客戶端和服務端程序。本文將詳細講解TCP通信的原理,并提供完整的代碼…

IPv4 地址嵌入 IPv6 的前綴轉換方式詳解

1. 概述 在 IPv4 和 IPv6 網絡共存的過渡期&#xff0c;NAT64&#xff08;Network Address Translation 64&#xff09;是一種關鍵技術&#xff0c;用于實現 IPv6-only 網絡與 IPv4-only 網絡的互操作。NAT64 前綴轉換通過將 IPv4 地址嵌入到 IPv6 地址中&#xff0c;允許 IPv…

動態神經網絡(Dynamic NN)在邊緣設備的算力分配策略:MoE架構實戰分析

一、邊緣計算場景的算力困境 在NVIDIA Jetson Orin NX&#xff08;64TOPS INT8&#xff09;平臺上部署視頻分析任務時&#xff0c;開發者面臨三重挑戰&#xff1a; 動態負載波動 視頻流分辨率從480p到4K實時變化&#xff0c;幀率波動范圍20-60FPS 能效約束 設備功耗需控制在1…

算法優選系列(9.BFS 解決拓撲排序)

目錄 拓撲排序簡介&#xff1a; ?編輯 課程表&#xff08;medium&#xff09;&#xff1a; 課程表II&#xff08;medium&#xff09;: 火星詞典&#xff08;hard&#xff09;&#xff1a; 拓撲排序簡介&#xff1a; 有向無環圖&#xff08;DAG圖&#xff09; 如上圖每條邊…

SpringBoot3+Vue3(1)-后端 請求頭校驗,jwt退出登錄,mybaits實現數據庫用戶校驗

1.后端&#xff1a;jwt請求頭校驗 解析 工具類jwtUtils 解析token 令牌是否過期&#xff0c;驗證 正常、異常、運行時錯誤 倒入工具類是resource 工具類中添加解析用戶的方法&#xff1a; 在 在工具類添加id解析 此處調用 添加controller做測試 測試&…

【免殺】C2免殺技術(八)APC注入

本文主要寫點自己的理解&#xff0c;如有問題&#xff0c;請諸位指出&#xff01; 概念和流程 “APC注入”&#xff08;APC Injection&#xff09;是免殺與惡意代碼注入技術中的一種典型方法&#xff0c;主要用于在目標進程中遠程執行代碼&#xff0c;常見于后門、遠控、植入型…

git工具使用

安裝Git 在開始使用Git之前&#xff0c;需要在本地計算機上安裝Git工具。Git支持Windows、macOS和Linux系統。可以從Git官方網站下載適合操作系統的安裝包&#xff0c;并按照安裝向導進行安裝。 bash復制插入 # 在Linux上安裝Git sudo apt-get install git# 在macOS上安裝Git…

SpringBoot微服務編寫Dockerfile流程及問題匯總

背景 跟 Docker 磕了兩天&#xff0c;將一個包含 N 個微服務的應用部署包改造&#xff0c;使其能夠生成 Docker 鏡像&#xff0c;并在 Docker 容器中運行。幾年前玩過 Docker&#xff0c;隱約記得幾個命令「Dockerfile 命令&#xff1a;黑卡飲料、山楂果費、哦SUV&#xff0c;…

pytorch語法學習

啟動 python main.py --config llve.yml --path_y test -i output

基于LiveData和ViewModel的路線管理實現(帶PopupWindow刪除功能)

包含RecyclerView綁定、PopupWindow刪除功能和SharedPreferences持久化存儲。 1. RouteInfo類(實現Parcelable接口) java 復制 下載 import android.os.Parcel; import android.os.Parcelable;public class RouteInfo implements Parcelable {private Integer routeID;p…

jvm安全點(二)openjdk17 c++源碼垃圾回收安全點信號函數處理線程阻塞

1. 信號處理與樁代碼&#xff08;Stub&#xff09;?? 當線程訪問安全點輪詢頁&#xff08;Polling Page&#xff09;時&#xff1a; ??觸發 SIGSEGV 信號??&#xff1a;訪問只讀的輪詢頁會引發 SIGSEGV 異常。??信號處理函數??&#xff1a;pd_hotspot_signal_handl…

如何用數據可視化提升你的決策力?

在數字化浪潮席卷全球的當下&#xff0c;數據已然成為企業和組織發展的核心資產。然而&#xff0c;單純的數據堆積猶如未經雕琢的璞玉&#xff0c;難以直接為決策提供清晰有力的支持。數據可視化作為一種強大的工具&#xff0c;能夠將海量、復雜的數據轉化為直觀、易懂的圖形、…

VoiceFixer語音修復介紹與使用

一.簡介 VoiceFixer 是一款基于深度學習的通用語音修復工具&#xff0c;主要用于恢復嚴重退化的語音信號&#xff0c;支持降噪、消除回聲、提升音質等功能。 二.核心功能 1.語音修復與增強 VoiceFixer 采用端到端的神經網絡模型&#xff0c;能夠處理多種語音退化問題&#x…

Vue百日學習計劃Day19-20天詳細計劃-Gemini版

重要提示&#xff1a; 番茄時鐘&#xff1a; 每個番茄鐘為25分鐘學習&#xff0c;之后休息5分鐘。每完成4個番茄鐘&#xff0c;進行一次15-30分鐘的長休息。動手實踐&#xff1a; DevTools 的使用和 Git 命令的掌握都需要大量的實際操作。請務必邊學邊練。環境準備&#xff1a…

Qt初識.

認識 QLabel 類&#xff0c;能夠在界面上顯示字符串. 通過 setText 來設置的。參數 QString (Qt 中把 C 里的很多容器類&#xff0c;進行了重新封裝。歷史原因) 內存泄露 / 文件資源泄露對象樹. Qt 中通過對象樹&#xff0c;來統一的釋放界面的控件對象. Qt 還是推薦使用 new 的…

WebGPU 圖形計算

以下是關于 WebGPU 圖形計算的基本知識點總結: 一、WebGPU 核心定位與優勢 1. 與傳統技術對比 維度WebGLWebGPU架構設計OpenGL ES 封裝現代圖形API抽象(Vulkan/Metal/D3D12)多線程支持單線程渲染多線程并行計算計算能力有限通用計算完整計算管線支持資源控制隱式狀態管理顯…

視覺基礎模型

2.1 視覺的“大模型”時代&#xff1a;ViT的誕生與革新 在計算機視覺領域&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;曾是當之無愧的霸主。從LeNet到ResNet&#xff0c;CNN在圖像分類、目標檢測等任務上取得了巨大成功。然而&#xff0c;隨著Transformer模型在自然語…

【React Native】快速入門

對于移動端應用來說&#xff0c;開發 Android 應用使用的語言有 java 和 kotlin&#xff0c;開發 ios 應用使用的語言有 obj-c 和 Swift 。因此&#xff0c;我們使用 react-native 編寫一套代碼進行跨端開發。 構建項目&#xff1a; npx create-expo-applatest安裝 nativewin…