版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 前言1</b></p><p> 1.1關(guān)于C語言1</p><p> 1.2關(guān)于課程設(shè)計(jì)1</p><p> 1.3關(guān)于黑白棋2</p><p><b> 工程概況2<
2、/b></p><p> 2.1黑白棋的簡要:2</p><p> 2.2可行性分析2</p><p><b> 正文3</b></p><p><b> 3.1摘要3</b></p><p> 3.2設(shè)計(jì)目的和意義3</p><
3、p> 3.3設(shè)計(jì)目標(biāo)與方案4</p><p><b> 3.4設(shè)計(jì)方法4</b></p><p><b> 3.5設(shè)計(jì)內(nèi)容5</b></p><p><b> 3.6對戰(zhàn)函數(shù)9</b></p><p> 3.7 程序編寫中遇到的問題12</p&g
4、t;<p> 4.1運(yùn)行結(jié)果13</p><p> 4.2設(shè)計(jì)創(chuàng)新與關(guān)鍵技術(shù)13</p><p> 4.3設(shè)計(jì)心得14</p><p><b> 有關(guān)說明15</b></p><p> 5.1軟件說明書15</p><p><b> 致謝16<
5、/b></p><p><b> 源程序16</b></p><p><b> 前言</b></p><p><b> 1.1關(guān)于C語言</b></p><p> C語言是國際上廣泛流行的計(jì)算機(jī)高級語言,它適合作為系統(tǒng)描述語言,即可以用來編寫系統(tǒng)軟件,也可以編寫
6、應(yīng)用軟件。在早期的操作系統(tǒng)軟件主要是匯編語言編寫的,但匯編語言依賴于計(jì)算機(jī)硬件程序的可讀性和可移植性級語言,而C語言兼具一般語言優(yōu)點(diǎn)還能克服其他語言的缺點(diǎn)[1]。</p><p><b> 1.2關(guān)于課程設(shè)計(jì)</b></p><p> 學(xué)習(xí)計(jì)算機(jī)語言的唯一目的是應(yīng)運(yùn),而應(yīng)運(yùn)要通過程序設(shè)計(jì)來體現(xiàn)的。進(jìn)行程序設(shè)計(jì),需要很強(qiáng)的邏輯思維能力,是一種極富創(chuàng)造性的智力勞動。這
7、樣可以認(rèn)為,語言是一種技能,程序設(shè)計(jì)是一門科學(xué)[7]。</p><p> 課程設(shè)計(jì)作為集中實(shí)踐性教學(xué)環(huán)節(jié),應(yīng)著重提高學(xué)生的自學(xué)能力,獨(dú)立分析、解決問題的能力和動手進(jìn)行實(shí)驗(yàn)的能力[7]。</p><p> 為了培養(yǎng)學(xué)生自學(xué)能力,對于設(shè)計(jì)或?qū)嶒?yàn)中可能碰到的重點(diǎn)、難點(diǎn),只要通過典型分析和講解,啟發(fā)學(xué)生的思路和自學(xué)的方法,以便達(dá)到舉一反三的作用。設(shè)計(jì)中還要教給學(xué)生查閱資料、使用工具書的方法,讓
8、他們遇到問題時(shí),不是立刻找老師,而是通過獨(dú)立思考,查閱資料和書籍,自己尋找答案。</p><p><b> 1.3關(guān)于黑白棋</b></p><p> 通過做《黑白棋游戲》讓我初步學(xué)會了怎樣編寫程序,怎樣使一個(gè)程序運(yùn)行,黑白棋的游戲是要在一個(gè)8*8的網(wǎng)格中進(jìn)行,而數(shù)組屬于構(gòu)造體類型,數(shù)組是具有相同數(shù)據(jù)類型的變量序列,序列中的每個(gè)變量成為元素,數(shù)組元素由一個(gè)統(tǒng)一標(biāo)識
9、的數(shù)組名和順序好“下標(biāo)”來表示。故需要在游戲中定義一個(gè)二維數(shù)從而實(shí)現(xiàn)游戲的走棋、落棋、判斷棋盤的變化等。同時(shí)加深了對各種函數(shù)的理解,通過這個(gè)課程設(shè)計(jì),培養(yǎng)我們能夠遵循軟件開發(fā)過程的基本規(guī)范,運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的方法,按照課程設(shè)計(jì)的題目要求,獨(dú)自地完成設(shè)計(jì)、編寫、調(diào)試和測試應(yīng)用程序及編寫文檔的任務(wù)。</p><p><b> 工程概況</b></p><p> 2.
10、1黑白棋的簡要: </p><p> 黑白棋,又叫反棋(Reversi)、奧賽羅棋(Othello),蘋果棋,翻轉(zhuǎn)棋。黑白棋起源中世紀(jì)的英國,18世紀(jì)傳入日本,并在日本得到了發(fā)展。現(xiàn)在,黑白棋在西方和日本很流行。游戲通過相互翻轉(zhuǎn)對方的棋子,最后以棋盤上誰的棋子多來判斷勝負(fù)。</p><p> 它的游戲規(guī)則簡單,
11、因此上手很容易,但是它的變化又非常復(fù)雜。有一種說法是:只需要幾分鐘學(xué)會它,卻需要一生的時(shí)間去精通它。</p><p><b> “黑白棋規(guī)則”:</b></p><p> 1)兩人對弈,以輪流方式持黑子與白子。</p><p> 2)開辟新局者持白子,加入者持黑子, 之后以輪流方式將棋子置于棋盤格子中。若無地方可下子,則跳過一回,由對方
12、下子。</p><p> 3)在提示的格子中,選擇一個(gè)格子下子, 當(dāng)下子的位置與離最近的同色旗子中, 若有其他棋子則中間的棋子變?yōu)榕c我方一樣顏色。</p><p> 4)當(dāng)下滿64個(gè)棋子,棋子多者為勝。</p><p><b> 2.2可行性分析</b></p><p> 游戲不同于基于C語言的其他程序(如學(xué)生成
13、績管理系統(tǒng)、教務(wù)工作管理系統(tǒng)、圖書管理系統(tǒng)等)由于游戲本身的問地就在于緩解壓力,所以基于C語言設(shè)計(jì)的游戲需要一個(gè)良好的游戲界面,給游戲者以輕松和愉快的感覺。TURBO C提供了70多個(gè)圖形函數(shù),這些函數(shù)包括在圖形庫文件graphics.LIB中,他們被定義在graphics.h中。有如此強(qiáng)大的圖形處理能力,去設(shè)計(jì)一個(gè)良好的人機(jī)交流界面是可行的。</p><p> 由于此游戲采用的是“人人對戰(zhàn)”的模式,所以在游戲
14、時(shí),需要倆個(gè)游戲者輪流下棋,棋手1走棋完畢后,經(jīng)過判斷棋盤變化過程后棋手2走棋,游戲過程需要在兩棋手間不斷進(jìn)行轉(zhuǎn)化。在C語言中,提供了包括if……else,switch……case等分支語句,綜合運(yùn)用這些分支語句,可以完成上述轉(zhuǎn)化。</p><p> 黑白棋游戲雙方共需要走棋60手,每次走棋后,都需要根據(jù)相同的標(biāo)準(zhǔn)判斷棋盤變化,來判斷旗子顏色的變化情況。顯然需要運(yùn)用循環(huán)語句來簡化編程的長度。C語言中提供了whi
15、le \for等循環(huán)語句可以實(shí)現(xiàn)上述功能[5].</p><p> 游戲需要操作和輸出顯示游戲的結(jié)果,游戲的操作要由計(jì)算機(jī)的外部設(shè)備在人的操作下完成。C語言本身并不提供輸入和輸出語句,輸入和輸出的操作都是由函數(shù)來完成的,在C語言的標(biāo)準(zhǔn)庫函數(shù)中提供了一些輸入和輸出的函數(shù),這些函數(shù)的指針都是針對系統(tǒng)隱含指定的輸入和輸出設(shè)備的。綜合運(yùn)用這些輸入和輸出的函數(shù)可以實(shí)現(xiàn)上述的功能。</p><p>
16、 經(jīng)濟(jì)可行性分析:本游戲的實(shí)現(xiàn),花費(fèi)了很多時(shí)間,但沒有花費(fèi)什么費(fèi)用,而已這樣簡單但有一定難度的游戲更能激發(fā)游戲愛好者的興趣,因此黑白棋游戲可以滿足游戲市場的尋求.</p><p> 綜合上述,基于C語言的游戲黑白棋的設(shè)計(jì)是可行的。</p><p><b> 正文</b></p><p><b> 3.1摘要</b>
17、</p><p> 程序設(shè)計(jì)語言類課程的指導(dǎo)思想是:使學(xué)生通過學(xué)習(xí)即高級編程語言的知識、編程技術(shù)和基本算法,又掌握程序設(shè)計(jì)的思想和方法,更具備利用計(jì)算機(jī)求解實(shí)際問題的能力,能靈活運(yùn)用高級語言進(jìn)行程序設(shè)計(jì)[6]。 其實(shí)認(rèn)真學(xué)習(xí)一門語言并不困難,關(guān)鍵要所追求的學(xué)習(xí)的方法和途徑。一條好的途徑便于快速掌握,熟悉運(yùn)用語言。學(xué)習(xí)的目的在于應(yīng)用,理論來源于實(shí)踐,如果在學(xué)習(xí)中能夠通過有效的途徑如自己動手設(shè)計(jì)一個(gè)功能比較
18、前大的開發(fā)系統(tǒng),借鑒于各種工具書,善于總結(jié)。定可以很好的效果。正是如此,使我們在這幾年中對語言學(xué)習(xí)有了很大提高。通過實(shí)踐的學(xué)習(xí),我認(rèn)到學(xué)好計(jì)算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí)C語言,還是其它的語言,以及其它的計(jì)算機(jī)方面的知識都要重在實(shí)踐,所以后在學(xué)習(xí)過程中,我會更加注視實(shí)踐操作,使自己便好地學(xué)好計(jì)算機(jī)。</p><p> 關(guān)鍵字: 程序設(shè)計(jì) 掌握 編程語言的知識 編程技術(shù) 基本算法 思想和方法</p
19、><p> 3.1.1 方案論述及概述</p><p> C語言是在國內(nèi)外廣泛使用的一種計(jì)算機(jī)語言。它適合作為系統(tǒng)描述語言,既可以用來編寫系統(tǒng)軟件,也可以編寫應(yīng)用軟件[5]。</p><p> 3.2設(shè)計(jì)目的和意義</p><p> 這個(gè)程序是對編程基本功的一個(gè)訓(xùn)練,將分支、循環(huán)、數(shù)組、函數(shù)綜合應(yīng)用,而不僅限于編制獨(dú)立的小程序,能夠大大提
20、高編程水平。</p><p> 3.2.1設(shè)計(jì)目的:</p><p> 1.掌握和利用C語言進(jìn)行程設(shè)計(jì)的能力;</p><p> 2.進(jìn)一步理解和運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法;</p><p> 3.初步掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法;</p><p> 4.學(xué)會調(diào)試一個(gè)較長程序的基本方法;</p
21、><p> 5.學(xué)會利用流程圖或N-S圖表示算法;</p><p><b> 3.2.2意義:</b></p><p> 通過編寫一個(gè)相對完整的《黑白棋游戲》程序,加強(qiáng)對C語言的認(rèn)識,也是對這一學(xué)期C語言課程中學(xué)習(xí)到的各種C語言語法結(jié)構(gòu)、編程方法和編程技巧進(jìn)行綜合復(fù)習(xí)以達(dá)到鞏固和提高。實(shí)現(xiàn)《黑白棋游戲》游戲功能,首先是輸出游戲模式,然后是通過
22、按鍵的方式實(shí)現(xiàn)棋子的移動,所以程序主要由三大部分實(shí)現(xiàn),一部分功能是顯示棋盤,一部分是實(shí)現(xiàn)游戲功能.一部分是游戲計(jì)分. </p><p> 3.3設(shè)計(jì)目標(biāo)與方案</p><p> 3.3.1 設(shè)計(jì)目標(biāo)</p><p> 在這一周半的課程設(shè)計(jì)時(shí)間里,充分利用所學(xué)的C語言知識編出《黑白棋游戲》程序。并使它編譯運(yùn)行,可以實(shí)現(xiàn)它的游戲功能.還要整理程序,分析程序.<
23、;/p><p> 3.3.2 工作進(jìn)度安排</p><p> 本次課程設(shè)計(jì)歷時(shí)八天,在這八天的時(shí)間里我們應(yīng)做到有計(jì)劃有安排與實(shí)際操作相結(jié)合,具體時(shí)間安排如下:</p><p> 1、前2天完成相關(guān)資料的收集整理,確立這實(shí)驗(yàn)的可行性。</p><p> 2、資料收集整理之后開始編寫程序,調(diào)試程序。</p><p>
24、 3、進(jìn)一步調(diào)試程序,并修改和完善程序,實(shí)現(xiàn)程序的可行性和美觀性。</p><p> 4、完成《課程設(shè)計(jì)說明書》。</p><p><b> 3.4設(shè)計(jì)方法</b></p><p> 游戲需要操作和輸出顯示游戲的結(jié)果,游戲的操作要由計(jì)算機(jī)的外部設(shè)備在人的操作下完成。C語言本身并不提供輸入和輸出語句,輸入和輸出的操作都是由函數(shù)來完成的,在C
25、語言的標(biāo)準(zhǔn)庫函數(shù)中提供了一些輸入和輸出的函數(shù),這些函數(shù)的指針都是針對系統(tǒng)隱含指定的輸入和輸出設(shè)備的。綜合運(yùn)用這些輸入和輸出的函數(shù)可以實(shí)現(xiàn)上述的功能。</p><p><b> 3.4.1程序功能</b></p><p> 黑白棋游戲是一個(gè)深受人們喜愛的游戲,通常是人機(jī)對奕,本程序設(shè)計(jì)為人與人對奕,一方執(zhí)黑棋,一方執(zhí)白棋,輪流走棋,每方都試圖在游戲結(jié)束前讓自己棋子的
26、數(shù)目多于對方。按鍵盤上的方向鍵可以上下左右移動棋子,按回車鍵可以擺放棋子。</p><p> 游戲黑白棋的總體設(shè)想</p><p> 在主函數(shù)中,通過調(diào)用繪制棋盤、棋手對戰(zhàn),判斷棋盤變化、改變棋子顏色等函數(shù)的調(diào)用來實(shí)現(xiàn)主函數(shù)的相應(yīng)的功能</p><p> 3.4.2用到的函數(shù)</p><p> 1.main()主函數(shù)</p>
27、;<p> 在主函數(shù)中,棋盤狀態(tài)用數(shù)組a[8][8],初值為0,表示空格。用圖形系統(tǒng)畫出棋盤,調(diào)用playtoplay()人人對弈函數(shù)開始游戲,一旦游戲結(jié)束后,關(guān)閉圖形系統(tǒng),程序結(jié)束。</p><p> 2.DrawQp()畫棋盤函數(shù)</p><p> 背景顏色設(shè)為藍(lán)色,從坐標(biāo)(100,100)開始每隔40個(gè)單位用白色畫一條水平直線,一條垂直線,構(gòu)成棋盤,用循環(huán)語句實(shí)現(xiàn)
28、。函數(shù)setfillstyle()可以設(shè)置填充模式和填充顏色,fillellipse(int x,int y,xradius,int yradius)以x和y為圓心,xradius和yradius為水平和垂直軸畫一填充橢圓,當(dāng)xradius和yradius相等時(shí),則畫出的是圓,用它表示棋子。</p><p> 3.SetPlayColor()設(shè)置棋子的顏色</p><p> 函數(shù)的參數(shù)
29、為整型變量t,根據(jù)t的值來設(shè)計(jì)填充棋子的當(dāng)前顏色,值為1代表白棋,值為2代表黑棋。</p><p> 4.MoveColor()恢復(fù)原來格子的狀態(tài)</p><p> 由于棋手在走棋的時(shí)候,他的棋子總是首先出現(xiàn)在棋盤的左上角,棋手要通過移動光標(biāo)走到要落子的位置,在經(jīng)過的路程上顯示當(dāng)前棋子,就會覆蓋原來的棋盤狀態(tài),所以一旦棋子走過后,就應(yīng)恢復(fù)原來的狀態(tài),是空格的依然顯示空格,是棋子的就顯示
30、原來棋子的顏色。因?yàn)槠遄右苿舆^程并沒有改變數(shù)組元素的值,所以可以根據(jù)數(shù)組元素的值判定原來的狀態(tài),如果值是1,就恢復(fù)白色棋子,值是2則恢復(fù)黑色棋子,否則恢復(fù)藍(lán)色空格。</p><p> 5.playtoplay()人人對戰(zhàn)函數(shù)</p><p> 這是游戲進(jìn)行的函數(shù),主要是接收棋手的按鍵消息,其處理過程如下:</p><p> 按Esc鍵程序可以隨時(shí)結(jié)束。<
31、/p><p> 按上下左右光標(biāo)鍵,則改變棋子移動的坐標(biāo)值。</p><p><b> 按回車鍵后判斷。</b></p><p> 6..QpChange()判斷棋盤變化</p><p> 當(dāng)棋手按回車鍵落子后,就要分別往8個(gè)方向判斷是否包圍住對方棋子,如果是,則改變棋盤,也就是棋盤上黑白棋子的個(gè)數(shù)要發(fā)生變化。如果所有
32、方向都判斷過,并且沒有引起棋盤的變化,則棋盤變化標(biāo)志值yes為0,返回yes,結(jié)束本函數(shù)。</p><p> ftp://kylinftp.vicp.net/常用軟件/編程開發(fā)/wintc172.exe根據(jù)當(dāng)前數(shù)組元素的值判斷分?jǐn)?shù),也就是各方棋子的個(gè)數(shù),如果數(shù)組元素值為1,白棋棋子數(shù)累加;如果數(shù)組元素值為2,則黑棋棋子數(shù)累加。</p><p> 7.PrintScore()輸出成績&l
33、t;/p><p> 利用設(shè)置實(shí)體填充模式填充矩形條清除掉前次的成績,再利用sprintf()函數(shù)將整數(shù)轉(zhuǎn)換為字符串的形式,再利用outtextxy()函數(shù)將成績輸出。</p><p> 8.playWin()輸出勝利者結(jié)果</p><p> 根據(jù)分?jǐn)?shù)值score1和score2的大小得出下棋的結(jié)果,輸出贏者信息。</p><p><b
34、> 3.5設(shè)計(jì)內(nèi)容</b></p><p> 設(shè)計(jì)一個(gè)《黑白棋游戲程序》,使之編譯,連接及運(yùn)行,實(shí)現(xiàn)它的游戲功能。</p><p> 3.5.1課程設(shè)計(jì)使用設(shè)備和軟件</p><p><b> 1.硬件:PC機(jī)</b></p><p> 2.軟件:Turbo C2.0/Turbo C++ 3.
35、0</p><p><b> 3.5.2設(shè)計(jì)步驟</b></p><p> 3.5.2.1總體設(shè)計(jì)</p><p><b> 1.主函數(shù)模塊</b></p><p><b> 2.子函數(shù)模塊</b></p><p> 以下是有關(guān)于主函數(shù)的流程圖
36、。</p><p><b> 圖3-1 流程圖</b></p><p> 3.5.3子函數(shù)功能一覽表</p><p><b> 子函數(shù)功能一覽表</b></p><p><b> 3.5.4棋盤函數(shù)</b></p><p><b>
37、繪制過程總括:</b></p><p> 圖3-2 棋盤繪制樹</p><p> 3.5.5圖形庫文件</p><p><b> 詳細(xì)介紹:</b></p><p> #include "graphics.h"</p><p> TURBO C提供了70多
38、個(gè)圖形函數(shù),這些函數(shù)包括在圖形庫文件graphics.LIB中,他們被定義在graphics.h中。編寫圖形程序的時(shí)候,一定高包口頭文件graphics.h。</p><p> 3.5.6圖形初始化函數(shù)</p><p> int gd=DETECT,gr</p><p> 圖形初始化函數(shù)initgraph(&driver,&mode,“路徑”)
39、</p><p> 功能:裝入圖形驅(qū)動程序</p><p> 參數(shù)DRIVER指圖形適配器驅(qū)動軟件,用宏名或數(shù)字來表示,它實(shí)際上是一個(gè)枚舉變量。當(dāng)不知道所用的顯示器是什么名稱的時(shí)候,可將driver設(shè)置成DETECT,它將自動的檢測所用的適培器的型號,并獎(jiǎng)相應(yīng)的驅(qū)動程序裝入,調(diào)節(jié)到最高分辨顯示模式。</p><p> 參數(shù)MODE是每一種圖形適配器的代碼,可以
40、是宏名或是數(shù)字,參數(shù)MODE不用指具體的值,系統(tǒng)將采用最高的分辨率。</p><p> 3.5.7設(shè)置背景顏色</p><p> Setbkcolor(color)——設(shè)置背景顏色。若不設(shè)置,則背景的顏色為黑色</p><p> Setcolor(color)——設(shè)置畫線的顏色或者是調(diào)色板的顏色。如果不設(shè)置,則系統(tǒng)指定為白色,其中COLOR為顏色的控制號或是顏
41、色的宏名,為整形,設(shè)置的顏色保存到程序中遇到下一個(gè)設(shè)置顏色是為止。</p><p> 在本程序中,設(shè)置的的北京顏色為藍(lán)色,setbkcolor(BLUE),根據(jù)上述可知,此時(shí),游戲界面的底色為藍(lán)色。setcolor(0)將線的顏色設(shè)置為黑色,由此是為了取消圓形周圍的東西。</p><p><b> 3.5.8畫線</b></p><p>
42、 Line(x1,y1,x2,y2)</p><p> 從點(diǎn)(X1,Y1)到點(diǎn)(X2,Y2)畫一條直線,顏色為當(dāng)前的顏色,當(dāng)前的位置是畫線前的位置。</p><p> for(i=100;i<=420;i+=40)</p><p><b> {</b></p><p> line(100,i,420,i);
43、/*畫水平線*/</p><p> line(i,100,i,420); /*畫垂直線*/</p><p><b> }</b></p><p> 在本程序中,使用上述源代碼實(shí)現(xiàn)繪制棋盤的功能,也就是以40為一個(gè)步增,以(100,100)為起點(diǎn),以(100,420)、(420,100)(420,420)為頂點(diǎn)畫出棋盤,棋盤大下為320*3
44、20,由于步增是40,所以,棋盤上自然出現(xiàn)8*8的格子,由于畫線的時(shí)候,沒有定義線的顏色,所以線的顏色是默認(rèn)的白色,所以最終出現(xiàn)了蘭色的底面上以白色畫格子的棋盤。</p><p> 3.5.9設(shè)置填充模式和顏色</p><p> Setfillstyle(pattern,color)——設(shè)置填充模式和顏色</p><p> 其中:pattern=SOLID_F
45、ILL為填充實(shí)心充色</p><p> Color為顏色號碼。</p><p> Ellipse為畫橢圓</p><p> Ellipse——用當(dāng)前顏色以(X,Y)為中心,X、Y為兩半徑</p><p> FILLELLIPSE(X,Y ,RX,RY)</p><p> 以(X,Y)為中心,以RX、RY為半徑
46、畫橢圓,并以設(shè)置或者是默認(rèn)的顏色來涂色</p><p> setfillstyle(SOLID_FILL,15);/*白色實(shí)體填充模式*/</p><p> fillellipse(500,200,15,15); /*在顯示得分的位置畫棋*/</p><p> setfillstyle(SOLID_FILL,8); /*黑色實(shí)體填充模式*/</p>
47、<p> setfillstyle(SOLID_FILL,WHITE);</p><p> 在本程序中,使用的上述的代碼來繪制棋子,棋子為半徑為15的圓,,顏色分別為代碼為15和8的深灰色和白色兩種棋子,分別由兩位旗手來使用。</p><p> a[3][3]=a[4][4]=1;/*初始兩個(gè)黑棋*/</p><p> a[3][4]=a[4]
48、[3]=2;/*初始兩個(gè)白棋*/</p><p> setfillstyle(SOLID_FILL,WHITE);</p><p> fillellipse(120+3*40,120+3*40,15,15);</p><p> fillellipse(120+4*40,120+4*40,15,15);</p><p> setfill
49、style(SOLID_FILL,8);</p><p> fillellipse(120+3*40,120+4*40,15,15);</p><p> fillellipse(120+4*40,120+3*40,15,15);</p><p> 開局是在8*8的棋盤的四個(gè)位置上分別設(shè)置四個(gè)棋子,位置分別為(3,3)|(4,4)兩個(gè)白子,(3,4)、(4,3)
50、兩個(gè)個(gè)黑子,也就是要在棋盤的(120+3*40,120+3*40)和(120+4*40,120+4*40)位置繪制半徑為15的倆個(gè)白球,在(120+3*40,120+4*40),(120+4*40,120+3*40)倆個(gè)位置繪制倆個(gè)黑色棋子。</p><p><b> 附表:顏色代號</b></p><p><b> 3.6對戰(zhàn)函數(shù)</b>&
51、lt;/p><p><b> 方向操作</b></p><p> 在主程序前,使用宏定義將 UP、DOWN 、LEFT 、RIGHT,做了相應(yīng)的定義,因此,在對戰(zhàn)函數(shù)當(dāng)中可以使用已經(jīng)進(jìn)行過定義的以上四個(gè)進(jìn)行操作,在操作的時(shí)候,由于所畫的棋盤的沒一個(gè)格子的大小是40*40,所以,每次鍵盤操作后,棋子移動的距離是向相應(yīng)的方向移動40,這樣才能保證每次落子的位置都在棋盤沒個(gè)
52、格子的中心處,保證了操作的有效性,也使得在棋子在棋盤上移動的過程中,如故和已經(jīng)落子的棋子有重疊,當(dāng)上訪旗子移走后不會在下方棋子的周圍留下其他的顏色。每次移動后,在屏幕上顯示的都是一個(gè)以15為半徑的圓形。</p><p> 同時(shí),為了滿足這一點(diǎn)就要在棋子每次走棋的初始位置上有所考慮:x=120,y=80每次棋子一開始出來的坐標(biāo),x為行坐標(biāo),y為列坐標(biāo),設(shè)定每次走棋的初始位置為(120,80),每次步增為40,以向
53、下移動一次為例子:向下移動一次以后,中心位置變?yōu)椋?20,120),格子的邊際的Y坐標(biāo)為100,一個(gè)格子的大小為40*40,所以,此時(shí)格子的中心坐標(biāo)也是(120,120),倆個(gè)坐標(biāo)吻合,保證了棋子落在棋盤位置的中央。</p><p> 由于走棋時(shí),每個(gè)格子不能重復(fù)落子,所以,需要判斷棋手要落子的地方是不是已經(jīng)有了棋子,if(y!=80&&a[(x-120)/40][(y-120)/40]!=1&
54、amp;&a[(x-120)/40][(y-120)/40]!=2),當(dāng)要落子的地方已經(jīng)有棋子的時(shí)候,也就是此時(shí)的棋子將要放置的位置的X和是Y坐標(biāo)已經(jīng)和以前棋手1或者是2的棋子有重復(fù),重復(fù)的時(shí)候則不能放置棋子。</p><p> 3.6.1落棋位置判斷</p><p> 對戰(zhàn)函數(shù)的主體部分,也就是倆棋手的輪換走棋。其中,T是已經(jīng)落下的棋子數(shù),當(dāng)?shù)谝粋€(gè)人走時(shí),T的值為1、3、5、
55、7等,當(dāng)?shù)诙€(gè)人走棋時(shí)T的值為2、4、6、8等,所以,當(dāng)T%2=0的時(shí)候,也就是T的值為2、4、6、8的時(shí)候,判定是棋手2在走棋,同時(shí),將棋子設(shè)定為黑色,反之則為棋手1在走棋,棋的顏色也相應(yīng)的變?yōu)榘咨?lt;/p><p> 走棋后,判斷棋盤的變化情況,將棋子途徑的地方恢復(fù)為空格狀態(tài),并且開始統(tǒng)計(jì)棋手的嘗試次數(shù),當(dāng)一個(gè)棋手在一次走棋的過程中嘗試的次數(shù)超過空格的個(gè)數(shù)的時(shí)候,取消該棋手的本次走棋,改為下個(gè)旗手走棋,也就
56、是跳出本次循環(huán),進(jìn)行下一次的循環(huán)。如果常識的次數(shù)沒有超過空格的個(gè)數(shù),而是落棋的位置無效,則旗手可以繼續(xù)嘗試,知道到達(dá)嘗試次數(shù)。</p><p> if(key==ESC)/*結(jié)束游戲*/</p><p><b> break;</b></p><p> if((score1+score2)==64||score1==0||score2==
57、0)/*格子已經(jīng)占滿或一方棋子為0判斷勝負(fù)*/</p><p><b> {</b></p><p> playWin();/*輸出最后結(jié)果*/</p><p> 當(dāng)某次走棋后,接受的按鍵的值為ESC的時(shí)候,則退出游戲,當(dāng)落子后在判定棋盤的變化時(shí),一方的棋子為0,或者是雙方已經(jīng)下滿60手,則執(zhí)行 playWin 函數(shù),輸出游戲的結(jié)果
58、。</p><p> 3.6.2判斷棋盤的變化和改變棋子的顏色</p><p><b> 棋子顏色變化:</b></p><p> a[i][j]=1\2\?</p><p><b> 白色</b></p><p><b> 黑色</b><
59、;/p><p><b> 蘭色(背景)顏色</b></p><p><b> =1</b></p><p><b> 不為1或2</b></p><p><b> =2</b></p><p> 通過判斷數(shù)a[i][j]的值來
60、判斷棋子的顏色,已經(jīng)定義當(dāng)a[i][j]=1的時(shí)候,棋子為白色,當(dāng)a[i][j]=2的時(shí)候棋子為黑色,當(dāng)a[i][j]的值不為1和2的時(shí)候,則此時(shí)恢復(fù)為背景。以下為走棋后改變棋子顏色的函數(shù)流程圖,根據(jù)游戲的游戲方法,在走棋后如果倆個(gè)己方棋子中間有對放棋子的話,那么對方棋子要改變?yōu)楹图悍较嗤念伾?,由于判斷相臨棋子要向上、下、左、右、左上、左下、右上、右下八個(gè)方向判斷,所以在落子后需要判斷八次。</p><p>&
61、lt;b> 計(jì)算i j 值</b></p><p><b> 向8個(gè)方向逐一判斷</b></p><p> int i,j,k,kk,ii,jj,yes;</p><p><b> yes=0;</b></p><p> i=(x-120)/40; /*計(jì)算數(shù)組元素的行下
62、標(biāo)*/</p><p> j=(y-120)/40; /*計(jì)算數(shù)組元素的列下標(biāo)*/</p><p> 根據(jù)以上的式子計(jì)算數(shù)組的下標(biāo)的值,由于第一次的落子走棋位置是在(120,120),所以在判斷位置是否在棋盤的范圍內(nèi)的時(shí)候要在X、Y的值的基礎(chǔ)上分別減去120,每個(gè)格子的大小是40*40,所以,做減法后所得的值的大小除120后得到當(dāng)前格子的信息。</p><p>
63、 根據(jù)黑白奇的游戲規(guī)則,在上,下,左,右,左上,左下,右上,右下的八個(gè)方向上,只要有己方的倆個(gè)棋子將對手的棋子圍住的話,則對方的棋子就要改變顏色,變?yōu)楹图悍筋伾恢隆K栽谂袛嗥灞P的變化的時(shí)候,需要以新落子的位置為中心向八個(gè)方向進(jìn)行判斷,現(xiàn)在以向右判斷為例,具體解釋:</p><p> if(j<6)/*往右邊*/</p><p><b> {</b>&l
64、t;/p><p> for(k=j+1;k<8;k++)</p><p> if(a[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格結(jié)束*/</p><p><b> break;</b></p><p> if(a[i][k]!=0&&k<8)</p
65、><p><b> {</b></p><p> for(kk=j+1;kk<k&&k<8;kk++)/*判斷右邊*/</p><p><b> {</b></p><p> a[i][kk]=a[i][j]; /*改變棋子顏色*/</p><p&
66、gt; fillellipse(120+i*40,120+kk*40,15,15);</p><p><b> }</b></p><p> if(kk!=j+1) /*條件成立則有棋子改變過顏色*/</p><p><b> yes=1;</b></p><p><b> }&
67、lt;/b></p><p><b> }</b></p><p> 當(dāng)以中心向右側(cè)判斷的時(shí)候,以現(xiàn)在所在的位置為起點(diǎn),逐一向右尋找,當(dāng)遇到自己的棋子或者是空格的時(shí)候則停止向右查找,當(dāng)倆個(gè)己方的棋子的X坐標(biāo)值相等的時(shí)候a[i][kk]=a[i][j],改變倆子之間的對手棋子顏色,,改變顏色后,意味著己方棋子以延伸到a[i][kk+1],則此時(shí)繼續(xù)向右判斷一次
68、,以此類推。</p><p> 將上述過程向八個(gè)方向分別做判斷。</p><p><b> 第四節(jié) 成績輸出</b></p><p><b> 清空成績</b></p><p> a[i][j]==1/2?</p><p><b> Score2++<
69、;/b></p><p><b> Score1++</b></p><p> Score2++>Score1++?</p><p><b> ???</b></p><p><b> 黑色勝利</b></p><p><b>
70、 全部勝利</b></p><p><b> =?</b></p><p><b> 白色勝利</b></p><p><b> 3.7.3輸出成績</b></p><p> void PrintScore(int playnum)/*輸出成績*/<
71、/p><p><b> {</b></p><p> if(playnum==1)/*清除以前的成績*/</p><p><b> {</b></p><p> setfillstyle(SOLID_FILL,BLUE);</p><p> bar(550,100,64
72、0,400);</p><p><b> }</b></p><p> setcolor(RED);</p><p> settextstyle(0,0,4);/*設(shè)置文本輸出樣式*/</p><p> if(playnum==1)/*判斷輸出哪個(gè)棋手的分,在不同的位置輸出*/</p><p&
73、gt;<b> {</b></p><p> sprintf(playone,"%d",score1);</p><p> outtextxy(550,200,playone);</p><p><b> }</b></p><p><b> else<
74、/b></p><p><b> {</b></p><p> sprintf(playtwo,"%d",score2);</p><p> outtextxy(550,300,playtwo);</p><p><b> }</b></p><
75、p> setcolor(0);</p><p><b> }</b></p><p> 上述程序段的功能是在判定游戲接受后,將倆人的分?jǐn)?shù)分別輸出。</p><p> bar(x1,y1,x2,y2)——畫一個(gè)方塊,無邊框,用當(dāng)前顏色填充。</p><p> Outtextxy——在(X,Y)位置上輸出文本
76、文件</p><p> Settextstyle——設(shè)置輸出的字型、大小和方向</p><p> 在統(tǒng)計(jì)完得分后,分別在(550,200)和(550,300)倆個(gè)地方輸出參與游戲的倆個(gè)人的分?jǐn)?shù)信息。</p><p> 3.7.4輸出最后的勝利者結(jié)果</p><p> void playWin()/*輸出最后的勝利者結(jié)果*/</p
77、><p><b> {</b></p><p> settextstyle(0,0,4);</p><p> setcolor(12);</p><p> if(score2>score1)/*開始判斷最后的結(jié)果*/</p><p> outtextxy(100,50,"bl
78、ack win!");</p><p><b> else</b></p><p> if(score2<score1)</p><p> outtextxy(100,50,"white win!");</p><p><b> else</b></
79、p><p> outtextxy(60,50,"you all win!");</p><p><b> }</b></p><p> 上述代碼是根據(jù)前述的統(tǒng)計(jì)得分的信息比較以后,得出勝利者,如果第二個(gè)人的得分高,則說明是黑子勝利,在(100,50)的位置上輸出black win,如果是得分一高,則說明是白子獲得勝利,在(
80、100,50)的位置上輸出“white win”,當(dāng)出現(xiàn)得分相同的情況時(shí),在(60,50)的位置上輸出“you all win!”。</p><p> 3.7 程序編寫中遇到的問題</p><p><b> 3.7.1宏定義</b></p><p> #define LEFT 0x4b00 /*光標(biāo)左鍵值*/</p><
81、;p> #define RIGHT 0x4d00 /*光標(biāo)右鍵值*/</p><p> #define DOWN 0x5000 /*光標(biāo)下鍵值*/</p><p> #define UP 0x4800 /*光標(biāo)上鍵值*/</p><p> #define ESC 0x011b /* ESC鍵值*/</p><p> #defi
82、ne ENTER 0x1c0d /* 回車鍵值*/</p><p> #define 宏名 宏體</p><p> #define是宏定義的命令,宏名是一個(gè)標(biāo)識符,宏體是一個(gè)字符序列。</p><p> 功能:用指定的的宏名代替宏體。</p><p> 在預(yù)編譯的時(shí)候,編譯程序用宏名代替所有的宏體,這個(gè)過程成為宏展開。</p&g
83、t;<p> 說明:宏體要大寫,方便閱讀</p><p><b> 宏名倆側(cè)要有空格</b></p><p><b> 不能在行尾加分號</b></p><p> 取消宏定義用#undef</p><p><b> 宏定義可以嵌套使用</b></p
84、><p> 在此程序中,由于要使用鍵盤對游戲進(jìn)行操作,使用鍵盤上的上、下、左、右四個(gè)方向鍵,所以在使用前,必須對其進(jìn)行宏定義,使用相應(yīng)的值來代替四個(gè)方向,這樣在操作中,系統(tǒng)接受的是一個(gè)值而不是方向,系統(tǒng)可以識別。 </p><p> 3.7.2 void</p><p> void playtoplay(void);/*人人對戰(zhàn)函數(shù)*/</p>&l
85、t;p> void DrawQp(void);/*畫棋盤函數(shù)*/</p><p> void SetPlayColor(int x);/*設(shè)置棋子第一次的顏色*/</p><p> void MoveColor(int x,int y);/*恢復(fù)原來棋盤狀態(tài)*/</p><p> void DoScore(void);/*處理分?jǐn)?shù)*/</p>
86、;<p> void PrintScore(int n);/*輸出成績*/</p><p> void playWin(void);/*輸出勝利者信息*/</p><p> void對象的值(不存在)不能以任何方式使用,也不能被顯示或隱示的轉(zhuǎn)化為任何非空</p><p> 的形式。因?yàn)関oid表達(dá)式表達(dá)的是一個(gè)不存在的值,這樣的表達(dá)式要用在不需
87、要具體值的地方[6]。</p><p> 大多數(shù)的表達(dá)式語句為賦值語句,表達(dá)式所引起的作用在下一條語句執(zhí)行前結(jié)束。沒有表達(dá)式的語句是空語句,空語句常常為循環(huán)提供一個(gè)空的循環(huán)體或者是設(shè)置標(biāo)號。</p><p> 在此程序的主程序前,定義了各個(gè)子函數(shù),由于只是定語了子函數(shù)的名稱,而沒有具體的語句,所以,此時(shí)的語句也相當(dāng)于空語句,所以,在此給它們設(shè)定為void. </p>&l
88、t;p><b> 4.1運(yùn)行結(jié)果</b></p><p> 4.2設(shè)計(jì)創(chuàng)新與關(guān)鍵技術(shù)</p><p><b> 4.2.1設(shè)計(jì)創(chuàng)新</b></p><p> 這個(gè)黑白棋游戲原程序的最大特點(diǎn)是采用了在主函數(shù)中調(diào)用子函數(shù)思想,每一種功能都是用子函數(shù)的辦法來進(jìn)行處理,簡潔,清晰,方便,不容易出現(xiàn)錯(cuò)誤。 在輸入錯(cuò)誤
89、時(shí)本來想用一種警告的鈴聲來提醒用戶,由于所學(xué)的知識不多,自己的編程經(jīng)驗(yàn)不足,按現(xiàn)有的知識水平有些東西暫時(shí)還無法解決,還有待于在以后的學(xué)習(xí)中不斷提高和改進(jìn)!</p><p> 功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計(jì)的可擴(kuò)展性。比如我要加入悔棋的功能,如果要改動面向過程的設(shè)計(jì),那么從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進(jìn)行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑挘挥酶膭悠灞P對象就行了,棋盤系統(tǒng)保存了黑白雙
90、方的棋譜,簡單回溯就可以了,而顯示和規(guī)則判斷則不用顧及,同時(shí)整個(gè)對對象功能的調(diào)用順序都沒有變化,改動只是局部的。</p><p><b> 4.2.2結(jié)論</b></p><p> 本次設(shè)計(jì)的黑白棋游戲程序相對簡單,對用戶的要求不高,所以對任何人都適用,也就是說游戲是一個(gè)面向大眾化的程序。</p><p> 通過本次C程序課程設(shè)計(jì),我覺得
91、對自己提高很大:克服了的偷懶的毛病,這在我以后的學(xué)習(xí)和工作中的心理定位與調(diào)節(jié)有很大的幫助。我感受到了編程是一項(xiàng)非常煩瑣周密的活動,他不但需要一個(gè)人周密的思考問題的能力,處理問題的能力,還需要有足夠的耐心和嚴(yán)謹(jǐn)治學(xué)的作風(fēng),來不得半點(diǎn)馬虎。</p><p> 通過本次論文設(shè)計(jì),我初步學(xué)會了論文設(shè)計(jì)的基本方法,學(xué)會了怎樣去借鑒別人的方法和經(jīng)驗(yàn),知道如何去查找資料和整合處理這些資料的能力,這為以后的大學(xué)畢業(yè)設(shè)計(jì)論文打下
92、了一個(gè)初步的基礎(chǔ)使我收益最大的是享受到了一種成功的喜悅,在這兩個(gè)星期之中從開始的確定論文題目,然后是上網(wǎng)和上圖書館查找資料,編寫C語言原程序,然后是進(jìn)行編譯,這個(gè)環(huán)節(jié)是一個(gè)非常痛苦和艱難的,常常會因?yàn)橐恍↑c(diǎn)的錯(cuò)誤而在編譯失敗與再次修改的漫漫循環(huán)之路中,但失敗的越多,對人的考驗(yàn)就越多,在編譯運(yùn)行成功之后的享受成功的喜悅也就越多,另外在調(diào)試程序的過程中不斷的思考和運(yùn)用已經(jīng)學(xué)到的知識,這對于自己是有很大的提高的。在這次程序中應(yīng)用到了各種函數(shù)都
93、是通過老師的細(xì)心講解和大量的查閱資料而編寫出來的[1]。通過這次的課程設(shè)計(jì)使我對學(xué)過的函數(shù)有了更深的了解,對沒學(xué)過的函數(shù)有了初步的了解。最終我們編寫一個(gè)相對完整的計(jì)算器程序,是對C語言的一種更為特別的認(rèn)識,也是對這一學(xué)期C語言課程中學(xué)習(xí)到的各種C語言語法結(jié)構(gòu)、編程方法和編程技巧進(jìn)行綜合復(fù)習(xí)以達(dá)到鞏固和提高的目的</p><p><b> 4.3設(shè)計(jì)心得</b></p><
94、;p> 經(jīng)過幾天的努力,終于快完成這次C程序課程設(shè)計(jì),雖然這幾天太累了,但感覺卻真的很好,通過這次課程設(shè)計(jì),自己對C語言有了新的認(rèn)識,對整體的程序設(shè)計(jì)方法也有了全新的認(rèn)識。</p><p> 在這次課程設(shè)計(jì)中,我深深地感受到了C語言的博大精深,從中知道了好多之前不知的知識。比如,用C語言還可以制作出有圖形化,有色彩的界面,之前都只是以為C語言制作出來的程序的運(yùn)行界面是一片黑屏,沒有什么有趣的東西,老想著
95、那個(gè)黑屏下能做出什么方便用戶操作的界面呢?但通過這次課程設(shè)計(jì),我清楚地得到了答案,用C語言做出的程序是很實(shí)用的,運(yùn)行效率是很高的。</p><p> 在這次課程設(shè)計(jì)過程中,遇到了很多麻煩。首先,還是由于粗心大意造成的錯(cuò)誤,比如寫少或?qū)懚嗔艘恍┳址?,使程序編譯出現(xiàn)了錯(cuò)誤,這些問題相信隨著以后實(shí)踐的加深會慢慢克服,還有一些致命的錯(cuò)誤,就是出現(xiàn)邏輯上的問題,那些小小的錯(cuò)誤都使得程序運(yùn)行時(shí)各個(gè)功能之間調(diào)用出現(xiàn)了問題,使
96、程序運(yùn)行得不到預(yù)期的結(jié)果,這些錯(cuò)誤需要我們花費(fèi)較長的時(shí)間去檢測,查看思路存在哪些錯(cuò)誤。要克服這些困難就要求我們在設(shè)計(jì)程序過程中要保持邏輯的思維,多做一些實(shí)踐。</p><p> 通過這次課程設(shè)計(jì),我學(xué)到了很多新的知識。例如,A.學(xué)會了如何利用設(shè)置繼點(diǎn)對程序進(jìn)行檢測,查找程序錯(cuò)誤,使對程序的錯(cuò)誤檢查效率大大地提高了,使程序的一些不知如何霧里查找的錯(cuò)誤被很快清查出來,克服了以往編程過程中一遇到錯(cuò)誤就束手無策的缺點(diǎn)。
97、B.學(xué)會更多的庫函數(shù)的使用,比如一些屏幕操作函數(shù),光標(biāo)定位函數(shù),時(shí)間函數(shù),這些都是以前沒有使用過的,也不曾認(rèn)識的函數(shù)。C.學(xué)會了利用流程圖表示算法,在做程序設(shè)計(jì)的電子文檔時(shí),深深地體會到了流程圖表示算法的重要性,通過流程圖可以將設(shè)計(jì)思想很清晰地表示出來,方便其它人查看,也方便自已寫程序。D.通過這次設(shè)計(jì),基本掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法,對運(yùn)用和理解結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法進(jìn)一步加深。</p><p>
98、 在這次課程設(shè)計(jì)中,我對程序做了一些擴(kuò)展:A.采用類似圖形化的界面,運(yùn)用一些屏幕操作函數(shù)對程序運(yùn)行界面進(jìn)行一些美化,使程序運(yùn)行時(shí)會出現(xiàn)歡迎界面,運(yùn)行界面,退出界面,在運(yùn)行界面中,有輸入、輸出窗口,還有菜單窗口、操作信息提示窗口、這些窗口在程序運(yùn)行過程中的位置是固定的,使信息可以在相對應(yīng)的窗口內(nèi)進(jìn)行輸入、輸出,改變了以往程序運(yùn)行界面從上到下進(jìn)行輸入或輸出信息的單一窗口界面形式。使程序運(yùn)行時(shí)出現(xiàn)了多窗口。B.在程序中調(diào)用一個(gè)時(shí)間函數(shù),使程序
99、運(yùn)行窗口的右上角顯示出了當(dāng)前的系統(tǒng)時(shí)間。</p><p> 在這次設(shè)計(jì)中,學(xué)到的知識很多,但要學(xué)知識也很多。在以后的學(xué)習(xí)中,我會努力地?cái)U(kuò)展C語言,加深對C語言的學(xué)習(xí)。</p><p><b> 有關(guān)說明</b></p><p><b> 5.1軟件說明書</b></p><p> TC一般安
100、裝在C盤下。</p><p><b> 游戲說明規(guī)則:</b></p><p> ESC 退出總游戲。</p><p> 用上下左右鍵來分別控制棋子的移動,移動到所定的位置后,按Enter表示下棋。</p><p> 棋子只能出現(xiàn)8*8的棋盤內(nèi),除了那些已經(jīng)有了棋子的地方不能走以外,不能吃子的地方也不能下子。&l
101、t;/p><p> 下子要求下在與對方棋子相鄰的空位上,要求所下的棋子和原有的已方棋子夾住對方的至少一個(gè)棋子(橫豎斜夾均可),然后把被夾住的子變成己方的顏色。下棋過程中,任何棋子既不會從棋盤上拿走,也不會從一個(gè)格子移到另一個(gè)格子,吃子時(shí),不會發(fā)生連鎖反應(yīng),吃進(jìn)的棋子不能再夾吃其他的子。當(dāng)雙方都無棋可下,或者方格全部占滿后,棋局結(jié)束,子多的一方為勝方。</p><p><b> 參
102、考文獻(xiàn):</b></p><p> [1] 譚浩強(qiáng). 《C程序設(shè)計(jì)(第三版)》. 北京,清華大學(xué)出版社.2005,7</p><p> [2] 譚浩強(qiáng). 《解放思想 勇于實(shí)踐 開創(chuàng)計(jì)算機(jī)基礎(chǔ)教育新局面》. 北京,清華大學(xué)出版社. 2002,7</p><p> [3] 唐全. 《計(jì)算機(jī)基礎(chǔ)教育的目標(biāo)定位與實(shí)施》. 南京:藥學(xué)教育. 2001,
103、第2期</p><p> [4] 陳清華. 《 C語言課程設(shè)計(jì)案例精選與編程指導(dǎo)》. 南京:東南大學(xué)出版社, 2003</p><p> [5] 吳鴻雁.關(guān)于《計(jì)算機(jī)語言教學(xué)方法探討》江南大學(xué)信息學(xué)院學(xué)術(shù)論文集.2004.5[6] 譚浩強(qiáng). 《C程序設(shè)計(jì)》.北京:清華大學(xué)出版社,2002,6</p><p> [7] 高福成 《C程序設(shè)計(jì)》.南京:
104、南開大學(xué),2001,1</p><p><b> 致謝 </b></p><p> 完成本次課程設(shè)計(jì),首先感謝zz老師,zz老師和zz老師的傾心指導(dǎo),在設(shè)計(jì)中我們也遇到問題,這些問題都是在他們的幫助下才得到解決的,并且在對界面美觀度和程序系統(tǒng)可行性方面都給予了我們很多寶貴的建議。在程序的設(shè)計(jì)方面,老師花出自己很多時(shí)間來給我們講解決問題方法,讓我們能夠很順利的完成程
105、序的設(shè)計(jì)。同時(shí)感謝學(xué)校能夠給予我們這種機(jī)會,讓我們可以用所學(xué)知識用于實(shí)踐,無疑通過這次鍛煉,不論是對現(xiàn)在的學(xué)習(xí)還是今后的工作都有很大的幫助。</p><p> 另外,通過這次設(shè)計(jì)我從指導(dǎo)老師身上學(xué)到了很多東西。老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的理論水平都使我受益匪淺。無論在理論上還是在實(shí)踐中,都給與我很大的幫助,使我得到不少的提高這對于我以后的工作和學(xué)習(xí)都有一種巨大的幫助,感謝他們耐心的輔導(dǎo)。我非常
106、感謝我的老師。與此同時(shí)還有同學(xué)同樣給與我不少幫助,大家一起學(xué)習(xí),一起探討、互相幫助、共同進(jìn)步,讓我徹底認(rèn)識了團(tuán)結(jié)的力量,在以后的日子了,我要努力的學(xué)習(xí),不辜負(fù)老師們的希望。</p><p><b> 附錄</b></p><p><b> 源程序</b></p><p> /*3.3.4 源程序*/</p>
107、;<p> #include "graphics.h" /*圖形系統(tǒng)頭文件*/</p><p> #define LEFT 0x4b00 /*光標(biāo)左鍵值*/</p><p> #define RIGHT 0x4d00 /*光標(biāo)右鍵值*/</p><p> #define DOWN 0x5000 /*光標(biāo)下鍵值*/<
108、/p><p> #define UP 0x4800 /*光標(biāo)上鍵值*/</p><p> #define ESC 0x011b /* ESC鍵值*/</p><p> #define ENTER 0x1c0d /* 回車鍵值*/</p><p> int a[8][8]={0},key,score1,score2;/*具體分?jǐn)?shù)以及按鍵與存
109、放棋子的變量*/</p><p> char playone[3],playtwo[3];/*兩個(gè)人的得分轉(zhuǎn)換成字符串輸出*/</p><p> void playtoplay(void);/*人人對戰(zhàn)函數(shù)*/</p><p> void DrawQp(void);/*畫棋盤函數(shù)*/</p><p> void SetPlayColo
110、r(int x);/*設(shè)置棋子第一次的顏色*/</p><p> void MoveColor(int x,int y);/*恢復(fù)原來棋盤狀態(tài)*/</p><p> int QpChange(int x,int y,int z);/*判斷棋盤的變化*/</p><p> void DoScore(void);/*處理分?jǐn)?shù)*/</p><p&
111、gt; void PrintScore(int n);/*輸出成績*/</p><p> void playWin(void);/*輸出勝利者信息*/</p><p> /******主函數(shù)*********/</p><p> void main(void)</p><p><b> {</b></p&
112、gt;<p> int gd=DETECT,gr;</p><p> initgraph(&gd,&gr,"c:\\tc"); /*初始化圖形系統(tǒng)*/</p><p> DrawQp();/*畫棋盤*/</p><p> playtoplay();/*人人對戰(zhàn)*/</p><p>&l
113、t;b> getch();</b></p><p> closegraph();/*關(guān)閉圖形系統(tǒng)*/</p><p><b> }</b></p><p> void DrawQp()/*畫棋盤*/</p><p><b> {</b></p><p&
114、gt;<b> int i,j;</b></p><p> score1=score2=0;/*棋手一開始得分都為0*/</p><p> setbkcolor(BLUE);</p><p> for(i=100;i<=420;i+=40)</p><p><b> {</b><
115、;/p><p> line(100,i,420,i);/*畫水平線*/</p><p> line(i,100,i,420); /*畫垂直線*/</p><p><b> }</b></p><p> setcolor(0);/*取消圓周圍的一圈東西*/</p><p> setfillst
116、yle(SOLID_FILL,15);/*白色實(shí)體填充模式*/</p><p> fillellipse(500,200,15,15); /*在顯示得分的位置畫棋*/</p><p> setfillstyle(SOLID_FILL,8); /*黑色實(shí)體填充模式*/</p><p> fillellipse(500,300,15,15);</p>
117、<p> a[3][3]=a[4][4]=1;/*初始兩個(gè)黑棋*/</p><p> a[3][4]=a[4][3]=2;/*初始兩個(gè)白棋*/</p><p> setfillstyle(SOLID_FILL,WHITE);</p><p> fillellipse(120+3*40,120+3*40,15,15);</p><
118、;p> fillellipse(120+4*40,120+4*40,15,15);</p><p> setfillstyle(SOLID_FILL,8);</p><p> fillellipse(120+3*40,120+4*40,15,15);</p><p> fillellipse(120+4*40,120+3*40,15,15);</
119、p><p> score1=score2=2; /*有棋后改變分?jǐn)?shù)*/</p><p> DoScore();/*輸出開始分?jǐn)?shù)*/</p><p><b> }</b></p><p> void playtoplay()/*人人對戰(zhàn)*/</p><p><b> {</b&
120、gt;</p><p> int x,y,t=1,i,j,cc=0;</p><p> while(1)/*換棋手走棋*/</p><p><b> {</b></p><p> x=120,y=80;/*每次棋子一開始出來的坐標(biāo),x為行坐標(biāo),y為列坐標(biāo)*/</p><p> while
121、(1) /*具體一個(gè)棋手走棋的過程*/</p><p><b> {</b></p><p> PrintScore(1);/*輸出棋手1的成績*/</p><p> PrintScore(2);/*輸出棋手2的成績*/</p><p> SetPlayColor(t);/*t變量是用來判斷棋手所執(zhí)棋子的顏色*/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計(jì)--黑白棋游戲
- 黑白棋游戲課程設(shè)計(jì)
- c語言課程設(shè)計(jì)報(bào)告--黑白棋
- vb黑白棋游戲課程設(shè)計(jì)報(bào)告
- c語言程序設(shè)計(jì)課程設(shè)計(jì)(論文)-黑白棋
- 黑白棋游戲數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 黑白棋游戲畢業(yè)設(shè)計(jì)
- 黑白棋畢業(yè)論文---黑白棋游戲設(shè)計(jì)與開發(fā)(含外文翻譯)
- 基于qt的黑白棋游戲
- 黑白棋游戲畢業(yè)論文
- 嵌入式wince課程設(shè)計(jì)報(bào)告(黑白棋)
- 黑白棋游戲設(shè)計(jì)與開發(fā)畢業(yè)論文
- 基于qt的黑白棋游戲開發(fā)(論文)
- 計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)---黑白棋
- 基于Qt的黑白棋游戲(終稿).doc
- 基于java me的黑白棋游戲設(shè)計(jì)及實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 基于java me的黑白棋游戲設(shè)計(jì)及實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 基于Alpha-Btea剪枝算法的黑白棋游戲的設(shè)計(jì)與開發(fā).pdf
- c語言課程設(shè)計(jì)-數(shù)組游戲
- c語言小游戲課程設(shè)計(jì)
評論
0/150
提交評論