C語言編程版五子棋小游戲

這些是C/C++能做的

服務(wù)器開發(fā)工程師、人工智能司志、云計(jì)算工程師甜紫、信息安全(黑客反黑客)、大數(shù)據(jù) 骂远、數(shù)據(jù)平臺(tái)囚霸、嵌入式工程師、流媒體服務(wù)器激才、數(shù)據(jù)控解拓型、圖像處理额嘿、音頻視頻開發(fā)工程師、游戲服務(wù)器劣挫、分布式系統(tǒng)册养、游戲輔助等

C語言是面向過程的,而C++是面向?qū)ο蟮?/div>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語言压固,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)球拦。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)帐我。

C++坎炼,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域拦键,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制点弯。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn)矿咕,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”抢肛。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn)碳柱,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”巡蘸,而就語言本身而言梧宫,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)痊硕!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒有好的算法收擦,一樣不行溪食。而且,“C加上好的設(shè)計(jì)”也能寫出非常好的東西半火。 ?

#include

#include

#define KEY_DOWN(vk_c) (GetAsyncKeyState(vk_c)&0x8000?1:0)

#include

#define N 20

int positionx=1;

int positiony=1;

int col=1;

int flag=0;//判斷勝利條件

int screen[N+1][N+1];

//延時(shí)函數(shù)

void delay(){

? ?long i;

? ?for(i=0;i<100000000;i++);

}小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 二六三越妈,六八八,二七六 】钮糖,無論你是大牛還是小白梅掠,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具店归,很多干貨和技術(shù)資料分享阎抒!

void cursor(int i,int j,COLORREF c){

? ?setlinecolor(c);

? ?line(j-10,i-10,j-5,i-10);

? ?line(j+5,i-10,j+10,i-10);

? ?line(j-10,i+10,j-5,i+10);

? ?line(j+5,i+10,j+10,i+10);

? ?line(j-10,i-10,j-10,i-5);

? ?line(j-10,i+5,j-10,i+10);

? ?line(j+10,i-10,j+10,i-5);

? ?line(j+10,i+5,j+10,i+10);

}

void start(){

? ?col=1;

? ?flag=0;

? ?initgraph(20+20*N,20+20*N);

? ?setlinecolor(WHITE);

? ?setbkcolor(BROWN);

? ?cleardevice();

? ?int i;

? ?for(i=10;i<=410;i+=20){

? ? ? ?line(i,10,i,410);

? ? ? ?line(10,i,410,i);

? ?}

? ?}

void updatewithinput(){

//檢測(cè)輸入

? ?while(1){

? ?if(KEY_DOWN(VK_UP)&&positiony>1){

? ?cursor(20*positiony-10,20*positionx-10,BROWN);

? ?positiony--;

? ?cursor(20*positiony-10,20*positionx-10,WHITE);

? ?delay();

? ?}

? ?if(KEY_DOWN(VK_DOWN)&&positiony<=N){

? ?cursor(20*positiony-10,20*positionx-10,BROWN);

? ?positiony++;

? ?cursor(20*positiony-10,20*positionx-10,WHITE);

? ?delay();

? ?}

? ?if(KEY_DOWN(VK_LEFT)&&positionx>1){

? ?cursor(20*positiony-10,20*positionx-10,BROWN);

? ?positionx--;

? ?cursor(20*positiony-10,20*positionx-10,WHITE);

? ?delay();

? ?}

? ?if(KEY_DOWN(VK_RIGHT)&&positionx<=N){

? ?cursor(20*positiony-10,20*positionx-10,BROWN);

? ?positionx++;

? ?cursor(20*positiony-10,20*positionx-10,WHITE);

? ?delay();

? ?}

? ?if(KEY_DOWN(VK_SPACE)){

? ?screen[positiony][positionx]=col;

? ?if(col==1)

? ? ? ?setfillcolor(BLACK);

? ?if(col==-1)

? ? ? ?setfillcolor(WHITE);

? ?fillcircle(positionx*20-10,positiony*20-10,9);

? ?delay();

? ?break;

? ?}

? ?}

? ?col=-col;

}

void updatewithoutinput(){

//判斷勝利條件

? ?if(screen[positiony][positionx]){

? ?if(positiony>=5&&screen[positiony-1][positionx]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony-2][positionx]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony-3][positionx]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony-4][positionx]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

? ?if(positiony<=16&&screen[positiony+1][positionx]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony+2][positionx]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony+3][positionx]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony+4][positionx]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

? ?if(positionx>=5&&screen[positiony][positionx-1]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony][positionx-2]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony][positionx-3]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony][positionx-4]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

? ?if(positionx<=16&&screen[positiony][positionx+1]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony][positionx+2]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony][positionx+3]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony][positionx+4]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

? ?if(positiony>=5&&positionx>=5&&screen[positiony-1][positionx-1]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony-2][positionx-2]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony-3][positionx-3]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony-4][positionx-4]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

? ?if(positiony<=16&&positionx<=16&&screen[positiony+1][positionx+1]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony+2][positionx+2]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony+3][positionx+3]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony+4][positionx+4]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

? ?if(positiony>=5&&positionx<=16&&screen[positiony-1][positionx+1]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony-2][positionx+2]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony-3][positionx+3]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony-4][positionx+4]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

? ?if(positiony<=16&&positionx>=5&&screen[positiony+1][positionx-1]==screen[positiony][positionx]){

? ? ? ?if(screen[positiony+2][positionx-2]==screen[positiony][positionx]){

? ? ? ? ? ?if(screen[positiony+3][positionx-3]==screen[positiony][positionx]){

? ? ? ? ? ? ? ?if(screen[positiony+4][positionx-4]==screen[positiony][positionx]){

? ? ? ? ? ? ? ? ? ?flag=1;

? ? ? ? ? ?}

? ? ? ? ? ?} ? ?

? ? ? ? ? ?}

? ? ? ? ? ?}

}

}

int main(){

begin:

? ?start();

? ?while(1){

? ? ? ?updatewithinput();

? ? ? ?updatewithoutinput();

? ? ? ?if(flag)

? ? ? ? ? ?goto begin;

? ?}小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 二六三,六八八消痛,二七六 】且叁,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)秩伞!裙內(nèi)有開發(fā)工具逞带,很多干貨和技術(shù)資料分享质涛!

? ?return 0;

}

解釋一下算法,繪圖過程是留給大家體會(huì)的

大家都下過五子棋掰担,判斷勝負(fù)應(yīng)該都會(huì)汇陆,五顆同色的連在一起就行,看一眼就知道了對(duì)吧带饱。但是具體是怎么做的呢毡代?人的大腦對(duì)于圖像識(shí)別能力超強(qiáng),幾乎是瞬間完成而且是潛意識(shí)地完成的勺疼。(人腦圖像識(shí)別能力在人臉識(shí)別技術(shù)成熟之前一度被認(rèn)為強(qiáng)于電腦教寂,現(xiàn)在被電腦超越了)。大家可以自己思考一下人腦是如何判斷五子棋勝利條件的执庐,關(guān)鍵是分解步驟對(duì)吧酪耕。分解步驟是一個(gè)極為重要的思想,其實(shí)人臉識(shí)別也是分步驟進(jìn)行轨淌,人腦的圖像處理也是分步進(jìn)行的迂烁。

想象你在下五子棋,對(duì)方落子了递鹉,你首先快速掃了一眼對(duì)方的子周圍盟步,發(fā)現(xiàn)該方向是你的子你就會(huì)忽略該方向,是對(duì)方的子你就向所在方向繼續(xù)重復(fù)以上過程躏结。其實(shí)有兩個(gè)關(guān)鍵步驟却盘。枚舉,遞歸媳拴。只是五子棋的規(guī)則很簡(jiǎn)單黄橘,不用封裝成函數(shù)。如果是圍棋之類的屈溉,我們就要封裝一下了塞关。還有一個(gè)優(yōu)化過程,修剪语婴。如果你把下一步所有可能畫在當(dāng)前步驟之下描孟,就像一棵樹對(duì)吧驶睦。不同的選擇就如同樹的枝丫砰左,如果不去修剪任其生長(zhǎng)的話,就會(huì)白白浪費(fèi)資源场航。如果明顯不可能有結(jié)果缠导,我們就除掉這個(gè)可能性,就像修剪枝丫一樣溉痢。

如果沒有修剪的過程的話僻造,最多就需要判斷877*7=2744次憋他,實(shí)際上完全沒必要。

還有需要解釋的是延時(shí)函數(shù)髓削。如果沒有延時(shí)過程竹挡,(按我的反應(yīng)速度和我的電腦的運(yùn)算速度),我每按下一次鍵盤程序就會(huì)執(zhí)行四五十次立膛。加上延時(shí)函數(shù)揪罕,強(qiáng)行拖慢拖慢程序,使程序執(zhí)行一次的時(shí)間大于人手按下鍵盤到松開鍵盤所需的時(shí)間宝泵,這樣才能有效的和電腦交互好啰。不知大家還記不記得我們之前是怎么實(shí)現(xiàn)延時(shí)的。對(duì)了,Sleep函數(shù)對(duì)吧《蹋現(xiàn)在我們繪制圖形不方便用Sleep函數(shù)框往,就只能自己寫一個(gè)循環(huán)空語句的函數(shù)。之前上課的時(shí)候提到過空語句也是有用的對(duì)吧闯捎,沒錯(cuò)椰弊,用來計(jì)時(shí),cpu的時(shí)鐘頻率是一定的瓤鼻,也就是主頻男应。

利用這點(diǎn),就可以利用空語句執(zhí)行次數(shù)推算出過去的時(shí)間了娱仔。

與此同時(shí)沐飘,kbhit函數(shù)也不好用了。電腦檢測(cè)鍵盤輸入是通過不斷掃描實(shí)現(xiàn)的牲迫。鍵盤一端接高電平耐朴,另一端接IO,鍵盤按下就會(huì)連接電源和IO輸入引腳盹憎,拉高引腳電平筛峭。很多條線路就能唯一確定是哪個(gè)鍵被按下,不同引腳的電平(或高或低)表示為二進(jìn)制以并行信號(hào)的形式輸入IO芯片在以串行信號(hào)輸出到數(shù)據(jù)總線就可以識(shí)別是哪個(gè)鍵了陪每。不過二進(jìn)制不用記影晓,頭文件里都定義好宏了,直接用宏就行檩禾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挂签,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盼产,更是在濱河造成了極大的恐慌饵婆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戏售,死亡現(xiàn)場(chǎng)離奇詭異侨核,居然都是意外死亡草穆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門搓译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悲柱,“玉大人,你說我怎么就攤上這事些己∈觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵轴总,是天一觀的道長(zhǎng)直颅。 經(jīng)常有香客問我,道長(zhǎng)怀樟,這世上最難降的妖魔是什么功偿? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮往堡,結(jié)果婚禮上械荷,老公的妹妹穿的比我還像新娘。我一直安慰自己虑灰,他們只是感情好吨瞎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著穆咐,像睡著了一般颤诀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上对湃,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天崖叫,我揣著相機(jī)與錄音,去河邊找鬼拍柒。 笑死心傀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拆讯。 我是一名探鬼主播脂男,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼种呐!你這毒婦竟也來了宰翅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤陕贮,失蹤者是張志新(化名)和其女友劉穎堕油,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肮之,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掉缺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戈擒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眶明。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筐高,靈堂內(nèi)的尸體忽然破棺而出搜囱,到底是詐尸還是另有隱情,我是刑警寧澤柑土,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布蜀肘,位于F島的核電站,受9級(jí)特大地震影響稽屏,放射性物質(zhì)發(fā)生泄漏扮宠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一狐榔、第九天 我趴在偏房一處隱蔽的房頂上張望坛增。 院中可真熱鬧,春花似錦薄腻、人聲如沸收捣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罢艾。三九已至,卻和暖如春尽纽,著一層夾襖步出監(jiān)牢的瞬間昆婿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工蜓斧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仓蛆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓挎春,卻偏偏與公主長(zhǎng)得像看疙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子直奋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 計(jì)算機(jī)二級(jí)C語言上機(jī)題庫(南開版) 1.m個(gè)人的成績(jī)存放在score數(shù)組中能庆,請(qǐng)編寫函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,371評(píng)論 1 42
  • 人的情感很奇怪 曾經(jīng)彼此動(dòng)心過的人,許久未見后脚线,明明還有一絲牽動(dòng)心弦搁胆!或許是多年的閱歷,面對(duì)表白更加鎮(zhèn)定,不答應(yīng)不...
    Judy惠蘭閱讀 194評(píng)論 0 0
  • 2017 11月15日 星期三 晴 今天早晨閨女比平時(shí)起的早渠旁,因?yàn)榻裉焖齻兯哪昙?jí)的同學(xué)全部都去西關(guān)小學(xué)...
    賈海露媽媽閱讀 382評(píng)論 0 1
  • 嗯攀例,又開始了古風(fēng)嘗試,仍舊是一堆雜牌彩鉛~感覺效果還不錯(cuò)顾腊。 詳細(xì)教程已在公眾號(hào):零基礎(chǔ)學(xué)彩鉛 同步更新粤铭,歡迎查看 啦啦啦
    悅離閱讀 103評(píng)論 0 3
  • “一個(gè)有女朋友的學(xué)長(zhǎng)好像在撩我” “拉黑咯” 不,或許他只是在表示友好杂靶,想在這個(gè)魚龍混雜的班級(jí)里找一個(gè)可以信賴的人...
    咖啡小姐Janice閱讀 162評(píng)論 0 0