簡單的C語言五子棋(兩種模式:移動光標輸入坐標和移動光標按鍵)

五子棋:
需要的數據:
1、定義棋盤數組
2、定義變量用于記錄棋子位置
3、定義角色變量
業務邏輯:
是否需要對數據進行初始化
for(;; )
{
1、清理屏幕,顯示棋盤
2、落子
坐標要合法,原位置不能有棋子
3、檢查是否形成五子
4、切換角色
}


直接上源碼:

第一種(移動光標輸入坐標):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>// 棋盤
char board[15][15];
// 棋子坐標
char kx = 7 , ky = 7;
// 角色
char role = '@';// 顯示棋盤
void show_board(void)
{system("clear");for(int i=0; i<15; i++){for(int j=0; j<15; j++){if(board[i][j]){printf(" %c",board[i][j]);}else{printf(" *");}}printf("\n");}
}
// 落子
void get_key(void)
{for(;;){printf("請%c輸入棋子位置(x y):",role);scanf("%hhd%hhd",&kx,&ky);if(kx >=0 && kx<15 && ky>=0 && ky<15 && !board[kx][ky]){board[kx][ky] = role;return;}}
}
// 檢查五子
bool check_board(void)
{int cnt = 0;for(int y=ky-1; y>=0 && board[kx][y]==board[kx][ky]; y--) // 左{ cnt++;}for(int y=ky+1; y<15 && board[kx][y]==board[kx][ky]; y++) // 右{ cnt++;}if(cnt >= 4) return true;cnt = 0;for(int x=kx-1; x>=0 && board[x][ky]==board[kx][ky]; x--) // 上{ cnt++;}for(int x=kx+1; x<15 && board[x][ky]==board[kx][ky]; x++) // 下{ cnt++;}if(cnt >= 4) return true;cnt = 0;for(int x=kx-1,y=ky-1; x>=0 && y>=0 && board[x][y]==board[kx][ky]; x--,y--) // 左上{ cnt++;}for(int x=kx+1,y=ky+1; x<15 && y<15 && board[x][y]==board[kx][ky]; x++,y++) // 右下{ cnt++;}if(cnt >= 4) return true;cnt = 0;for(int x=kx-1,y=ky+1; x>=0 && y<15 && board[x][y]==board[kx][ky]; x--,y++) // 右上{ cnt++;}for(int x=kx+1,y=ky-1; x<15 && y>=0 && board[x][y]==board[kx][ky]; x++,y--) // 左下{ cnt++;}if(cnt >= 4) return true;return false;
}
int main()
{for(;;){show_board();get_key();if(check_board()){show_board();printf("恭喜%c勝利,游戲結束!\n",role);return 0;}role = '@'==role?'#':'@';}}

第二種(移動光標按鍵):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>// 棋盤
char board[15][15];
// 棋子坐標
char kx = 7 , ky = 7;
// 角色
char role = '@';// 顯示棋盤
void show_board(void)
{system("clear");for(int i=0; i<15; i++){for(int j=0; j<15; j++){if(board[i][j]){printf(" %c",board[i][j]);}else{printf(" *");}}printf("\n");}
}
// 落子
void get_key(void)
{printf(" -----------請%c落子-----------\n",role);for(;;){printf("\33[%hhd;%hhdH",kx+1,(ky+1)*2);switch(getch()){case 183: kx>0 && kx--; break;case 184: kx<14 && kx++; break;case 185: ky<14 && ky++; break;case 186: ky>0 && ky--; break;case 10: if(!board[kx][ky]){board[kx][ky] = role;return;}}}}int count_eqkey(int ox,int oy)
{int count = 0;for(int x=kx+ox,y=ky+oy; x>=0 && x<15 && y>=0 && y<15 &&board[x][y]==board[kx][ky]; x+=ox,y+=oy){count++;}return count;
}// 檢查五子
bool check_board(void)
{if(count_eqkey(0,-1)+count_eqkey(0,1) >= 4)return true;if(count_eqkey(-1,0)+count_eqkey(1,0) >= 4)return true;if(count_eqkey(-1,-1)+count_eqkey(1,1) >= 4)return true;if(count_eqkey(-1,1)+count_eqkey(1,-1) >= 4)return true;return false;
}
int main()
{for(;;){show_board();get_key();if(check_board()){show_board();printf("恭喜%c勝利,游戲結束!\n",role);return 0;}role = '@'==role?'#':'@';}}

歡迎小可愛評論區發布自己的簡介~~
歡迎互關,關注~

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

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

相關文章

nodejs-- vuex中mapActions

mapActions() 返回的是一個對象, 用了 ... 擴展符后&#xff0c;才可以放進一個對象里&#xff0c;和其他組件內定義的 method 在同一個 methods 對象。 { methods: mapActions() // 如果沒有其它組件內的定義的方法,可以這樣寫}{ methods: { ...mapActions()&#xff0c;// 如…

怎樣讓手中的錢成為生財工具

大多數人之所以跟錢之間總有不可逾越的鴻溝&#xff0c;是因為他們不知道錢的活動能力。 錢&#xff0c;跟人一樣是有生命的。每一塊錢就是你的一個職員&#xff0c;你的目標是讓你的職員勤奮工作&#xff0c;經過時間的沉淀&#xff0c;人員會日益壯大&#xff0c;工作效率會…

Android 開發知識集合目錄

深入理解java的形參和實參&#xff1a; www.cnblogs.com/xuxinstyle/… sharepreference 與 數據庫 區別&#xff1a; Android 各版特點&#xff1a; Android發展史&#xff08;Android各版本特性-知識篇&#xff09; blog.csdn.net/u012964796/…

mysql 查外鍵關聯關系 (指定被引用表,查哪些表對其有外鍵引用)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 在一個業務功能中要求先清空一張基礎表&#xff08;user表&#xff09;再插入一批新數據。 在刪除過程中報錯為其它表有外鍵引用&#…

Shell腳本語言基礎總結

*** 一&#xff0c;shell教程 Shell 是一個用 C 語言編寫的程序&#xff0c;它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言&#xff0c;又是一種程序設計語言 二&#xff0c;shell環境 跟 JavaScript、php 編程一樣&#xff0c;只要有一個能編寫代碼的文本編輯器和一…

Error: Can't resolve 'babel-loader'

在控制臺中運行命令“webpack”&#xff0c;出現錯誤&#xff1a;“ERROR in Entry module not found: Error: Cant resolve babel-loader in.........” 解決方法是在控制臺輸入命令“npm install babel-loader --save"。轉載于:https://www.cnblogs.com/Niuxingyu/p/107…

docker 4 section

鏡像和容器的關系&#xff1a; 鏡像是容器的基礎&#xff0c;每次執行 docker run 的時候都會指定哪個鏡像作為容器運行的基礎。我們可以使用的都是來自于 Docker Hub 的鏡像。直接使用這些鏡像是可以滿足一定的需求&#xff0c;而當這些鏡像無法直接滿足需求時&#xff0c;我們…

日本專家給出的存錢高招(圖)

專家認為&#xff0c;對自己錢包里裝了多少錢沒有數的人&#xff0c;是個有浪費趨向的人&#xff0c;如果改變這一習慣&#xff0c;一定會讓你的存款增多不少。 人們常說&#xff0c;猶太人善于賺錢&#xff0c;美國人善于花錢&#xff0c;中國人和日本人善于存錢。在日本現代…

精讀《V8 引擎 Lazy Parsing》

1. 引言 本周精讀的文章是 V8 引擎 Lazy Parsing&#xff0c;看看 V8 引擎為了優化性能&#xff0c;做了怎樣的嘗試吧&#xff01; 這篇文章介紹的優化技術叫 preparser&#xff0c;是通過跳過不必要函數編譯的方式優化性能。 2. 概述 & 精讀 解析 Js 發生在網頁運行的關鍵…

Git和SVN的區別,Git的使用方法大全

什么是Git: Git 是一個開源的分布式版本控制系統&#xff0c;用于敏捷高效地處理任何或小或大的項目。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。 Git 與常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布…

詳解 springboot - 查看、修改內置 tomcat 版本

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、解析Spring Boot父級依賴 ?123456<parent> <groupId>org.springframework.boot</groupId> <artifactId>sp…

做生意的技巧 年入百萬不是夢(圖)

先介紹一下背景&#xff1a;這個表弟是土妖親大姨家的&#xff0c;從小不愛學習&#xff0c;但是腦子活絡。 現在在江蘇省泰州市姜堰區的一個農貿市場&#xff0c;開一個小餐館。餐館面積50多平米&#xff0c;年收入120萬左右。 少即是多——“我的小飯店只賣25種菜” 表弟…

reboot重啟失敗的解決方法

今天突然碰到用reboot命令不能重啟&#xff0c;上網找原因&#xff1a; reboot不能重啟可能是內核正在執行一些進程&#xff0c;reboot發送的信號被阻塞了&#xff0c;估計等一會內核從內核空間跳到用戶空間的時候&#xff0c;發現有信號被阻塞了&#xff0c;再執行這個阻塞的信…

BUAA-OO 第二單元作業“電梯調度”總結與思考

一、需求分析 利用java線程的相關知識實現 1&#xff09;單部多線程傻瓜調度&#xff08;FAFS&#xff09;電梯 2&#xff09;單部多線程可捎帶調度&#xff08;ALS&#xff09;電梯 3&#xff09;多部多線程智能&#xff08;SS&#xff09;調度電梯 二、思路分析 1、基于度量的…

解決報錯 javax.persistence.TransactionRequiredException: Executing an update/delete query

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題。 場景是我想要執行一條很簡單的刪除語句。 JPA方式中使用本地sql , 寫法如下&#xff1a; ModifyingQuery("delete fr…

linux基礎知識點總結-最實用!(環境搭建,系統分區,常用命令,vim文本)

Linux系統介紹&#xff1a; Linux管理硬盤的能力非常強&#xff0c;所以我們看到的只有一個分區。 / 根目錄&#xff0c;所有文件都存儲在它下面 /bin 存儲著系統命令 /dev 設備文件&#xff08;一切皆文件&#xff09; /home 用戶主目錄&#xff0c;會自動生成用戶同名目錄 /…

遞歸實現進制轉換(C++版)

上次呢&#xff0c;我們留下了一道題&#xff0c;今天我們來一起看一看&#xff1a; 題目鏈接&#xff1a;https://www.cnblogs.com/gaozirong/p/10547434.html 這是我寫的程序&#xff0c;大家可以對照參考一下&#xff08;C&#xff09;&#xff1a; #include<bits/stdc.h…

解決 mysql 插入數據報錯: Cannot add or update a child row: a foreign key constraint fails

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 場景&#xff1a;我的情況是主表為用戶 user 表&#xff0c;從表為職位 job 表&#xff0c;其中 job 表有一個外鍵為 user 表的主鍵。 …

猶太人從未透露的12個秘密(圖)

中國人喜歡攢錢&#xff0c;西方人熱衷花錢&#xff0c;只有猶太人精于賺錢。 他們認為&#xff1a;唯有運用智慧賺錢&#xff0c;才是真正的致富之道。他們的經商智慧風靡全球&#xff0c;造就了無數的商業巨子。本文通過解讀猶太人精妙絕倫的經商之道&#xff0c;從人性、道…

vim文本編輯器的配置vimrc

在行底模式下對vim的設置只是臨時有效&#xff0c;如果想長期有效需要把這些設置語句寫入配置文件(~/.vimrc)中。 打開vim的配置&#xff1a;vim ~/.vimrc 進行編輯&#xff1a; " 顯示行號 set number" tab鍵寬度 set tabstop4" 設置自動縮進 set autoindent…