貪吃蛇游戲選題的目的和意義(含國內(nèi)外相同領(lǐng)域、同類課題的研究現(xiàn)狀分析)
隨著動畫技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)傳播速度越來越快,F(xiàn)lash游戲已經(jīng)成為現(xiàn)在人生活娛樂,打發(fā)時(shí)間,緩解壓力的一項(xiàng)不可或缺的項(xiàng)目。而一個(gè)優(yōu)秀的Flash游戲離不開游戲畫面、程序腳本以及后期音效的共同作用。因此,越來越多有著引人入勝的劇情,豐富有趣的畫面,好聽難忘的音樂的Flash小游戲在互聯(lián)網(wǎng)上被越來越多的玩家喜愛和分享。當(dāng)這些兼具藝術(shù)性與流行性的元素都由一個(gè)游戲組合到一起,人們可以從中得到娛樂和放松,同時(shí)有得到一些對生活對人生的啟發(fā),讓人會心一笑。而創(chuàng)作者也可以選擇不同的風(fēng)格,不同的手法用計(jì)算機(jī)的一系列數(shù)碼藝術(shù)創(chuàng)作手法實(shí)現(xiàn)自己的創(chuàng)意,然后在一些交流互動網(wǎng)站上發(fā)表,供他人娛樂或者借鑒,同時(shí)也可以得到廣大互聯(lián)網(wǎng)用戶的意見,從而提高自身的創(chuàng)作水品。
由此可見,F(xiàn)lash游戲設(shè)計(jì)的意義就在于:
集合不同的藝術(shù)門類,把藝術(shù)與技術(shù)相結(jié)合。從而讓人可以在游戲中的到美的享受。
給廣大的互聯(lián)網(wǎng)用戶提供了一個(gè)娛樂,休閑,放松身心的地方。
讓設(shè)計(jì)師之與玩家之間產(chǎn)生交流,從而完善游戲。
操作便捷,文件攜帶方便,無需安裝,符合了現(xiàn)在很多快餐式的生活要求便于大眾隨時(shí)的下載,游戲。
有豐富的圖像,畫面不受軟件的限制。富有創(chuàng)意,風(fēng)格多變。是其他電子游戲沒有的。國內(nèi)外研究現(xiàn)狀及分析:目前利用Flash開發(fā)出了許多夸平臺的網(wǎng)絡(luò)游戲,甚至可以匹敵大型MMOR,在3G時(shí)代到來以后,我們很快可以在手機(jī)上玩到大型網(wǎng)絡(luò)游戲,現(xiàn)有的Flash制作網(wǎng)絡(luò)游戲有:SLG類(熱血三國),體育類(熱血球球),RPG類(凡人修真),桌面(德州撲克),TD類(保衛(wèi)家園)等等.在日本和美國,動畫和游戲這一類的技術(shù)超出國內(nèi)比較多,日本的動漫位居世界前列是眾所周知的。要想在這一方面能有所作為,仍需加倍努力。
3000多學(xué)生課間操玩真人版貪吃蛇,這樣的活動有什么作用和意義?
我覺得讓學(xué)生們進(jìn)行這樣的活動,意義主要有以下幾個(gè)。
第一,放松學(xué)生們的心情。
現(xiàn)在學(xué)生們的壓力實(shí)際上是非常大的,他們每天呢除了學(xué)習(xí)就是學(xué)習(xí),睜開眼睛的第1件事情就是去上學(xué),然后呢一直到很晚才能夠睡覺,所以呢,現(xiàn)在學(xué)生的壓力是非常大的,但是呢,學(xué)生有一個(gè)課間操就是為了讓學(xué)生放松的。
但是由于學(xué)校里面的在課間通組織上面并不是很好,僅僅只是讓學(xué)生們自由活動,或者讓學(xué)生們跳一個(gè)廣播體操,但這種方式往往不能夠讓學(xué)生們真正放松,只有在進(jìn)行團(tuán)隊(duì)活動的時(shí)候才能夠真正起到放松身心的作用,所以呢,這樣的活動能夠放松學(xué)生的心情,減輕學(xué)生的壓力。
第二,可以增強(qiáng)班級凝聚力。
很多時(shí)候呢一個(gè)人他往往是歷代世博的,但是如果每一個(gè)個(gè)人的組成一個(gè)團(tuán)體,那么這個(gè)團(tuán)體的力量是非常大的。但是那么多人在一個(gè)團(tuán)體中,它往往是會有矛盾的或者往往有一些不好的東西,如果讓這個(gè)團(tuán)體能凝聚成一股繩,然后呢,去做同樣的事情。
久而久之這樣的話班級凝聚力會變強(qiáng)很多,班主任呢在考慮如何增加自己班級的凝聚力的時(shí)候,都會非常頭疼,我覺得這是一個(gè)非常好的辦法,就是讓他們參加這樣的活動,在活動中培養(yǎng)班級凝聚力,培養(yǎng)集體榮譽(yù)。
第三,增強(qiáng)學(xué)生們的娛樂能力。
現(xiàn)在學(xué)校呢,只顧培養(yǎng)孩子的計(jì)算能力,背誦能力等等一系列跟知識有關(guān)的能力,但是培養(yǎng)孩子的娛樂能力也是非常重要的,如果一個(gè)學(xué)生除了學(xué)習(xí)或者工作之外,什么事兒都不會往往他這個(gè)人是非常孤獨(dú)和無聊的,他的社交能力是存在問題的,所以呢,參加這樣的活動能夠增強(qiáng)學(xué)生們的娛樂能力。
貪吃蛇開發(fā)的理論是什么?
貪吃蛇是一款經(jīng)典的小游戲,開發(fā)貪吃蛇的理論主要是基于計(jì)算機(jī)圖形學(xué)和計(jì)算機(jī)科學(xué)的相關(guān)知識。
具體來說,貪吃蛇的開發(fā)涉及到以下理論:
程序設(shè)計(jì):開發(fā)者需要根據(jù)游戲的規(guī)則和操作方式,設(shè)計(jì)程序的邏輯和結(jié)構(gòu)。
算法設(shè)計(jì):開發(fā)者需要設(shè)計(jì)算法來實(shí)現(xiàn)蛇的運(yùn)動、食物的生成、游戲難度的逐漸增加等功能。
圖形學(xué):開發(fā)者需要使用計(jì)算機(jī)圖形學(xué)知識,繪制游戲中的蛇、食物、地圖等元素,使其看起來更加逼真。
碰撞檢測:開發(fā)者需要設(shè)計(jì)碰撞檢測算法,判斷蛇是否吃到了食物,或者是否與墻壁或自身相撞。
數(shù)據(jù)結(jié)構(gòu):開發(fā)者需要使用數(shù)據(jù)結(jié)構(gòu)來存儲和管理游戲中的各種元素,如蛇的身體、食物的位置、游戲得分等。
綜上所述,貪吃蛇的開發(fā)涉及多個(gè)領(lǐng)域的知識,開發(fā)者需要將它們有機(jī)地結(jié)合起來,才能實(shí)現(xiàn)一個(gè)完整的游戲。
C語言課程設(shè)計(jì) 貪吃蛇
2.1程序功能介紹
貪吃蛇游戲是一個(gè)經(jīng)典小游戲,一條蛇在封閉圍墻里,圍墻里隨機(jī)出現(xiàn)一個(gè)食物,通過按鍵盤四個(gè)光標(biāo)鍵控制蛇向上下左右四個(gè)方向移動,蛇頭撞倒食物,則食物被吃掉,蛇身體長一節(jié),同時(shí)記10分,接著又出現(xiàn)食物,等待蛇來吃,如果蛇在移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。
2.2程序整體設(shè)計(jì)說明
一個(gè)游戲要有開始部分,運(yùn)行部分,結(jié)束部分(實(shí)際上開始部分與運(yùn)行部分是一體的)。
2.2.1設(shè)計(jì)思路
這個(gè)程序的關(guān)鍵是表示蛇的圖形以及蛇的移動。用一個(gè)小矩形表示蛇的一節(jié)身體,身體每長一節(jié),增加一個(gè)矩形塊,蛇頭用兩節(jié)表示。移動時(shí)必須從蛇頭開始,所以蛇不能向相反方向移動,也就是蛇尾不能改作蛇頭。如果不按任何鍵,蛇自行在當(dāng)前方向上前移,當(dāng)游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動,一步移動一節(jié)身體,所以當(dāng)按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動,圖形的實(shí)現(xiàn)是從蛇頭的新位置開始畫出蛇,這時(shí)由于沒有慶平的原因,原來蛇的位置和新蛇的位置差一個(gè)單位,所以看起來社會多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)和消失也是畫矩形塊和覆蓋矩形塊
2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及用法說明
開始部分:
游戲是運(yùn)行在圖形模式下的,所以第一步一定是初始化圖形模式,接著要有開始的界面,就像書有封面一樣,我設(shè)置了一個(gè)游戲的標(biāo)題畫面,除了游戲標(biāo)題畫面我還設(shè)置了一個(gè)歡迎畫面。標(biāo)題畫面以后,還要為游戲的運(yùn)行部分作初始化,包括繪制游戲運(yùn)行時(shí)的背景,對游戲某些重 要變量的初始化。
運(yùn)行部分:
作為游戲的核心部分,這里包括的函數(shù)比較多,也就是模塊比較多,首先讓我模擬一下貪吃蛇的游戲模式:某個(gè)世界上突然出現(xiàn)一條蛇,它很短,它的運(yùn)動神經(jīng)異常,它沒法停止自己的多動癥在它的世界里就只有食物,它很餓,也很貪吃;同樣在不明原因的情況下,食物從天而降,可惜的是沒有落到嘴邊;饑餓的主人公,不管它有沒有毒,也不問食物的來歷,徑直向食物爬去;它吃到食物啦,它超出想象的同化能力讓食物很快的成為自己身體的一部分,它的身子變長啦。當(dāng)它吃到第一顆食物時(shí),上帝有給它第二顆,于是它吃了第二顆,于是又變長了,于是又有第三顆……它的身子是一直的加長,它不管自己過長身體的麻煩——轉(zhuǎn)身不便,繼續(xù)吃下去,現(xiàn)在它是直接把巴張大,好讓食物有個(gè)綠色通道。但是在某天的下午,它咬到了自己,它才想起自己是一條毒蛇,于是暈死過去(不是毒死);又或者它往食物沖鋒的時(shí)候,它失去控制,撞到了墻上。
第一輪循環(huán):第一步,出現(xiàn)食物;第二步,蛇不停運(yùn)動;第三步,檢查蛇是撞到自己或墻壁;由第四步起游戲有兩條支線(A、B):
A :第四步,蛇沒有碰到自己或墻壁,蛇繼續(xù)前進(jìn),繪制蛇的動作;第五步,判斷蛇是否吃到食物,如果蛇吃到食物,身子變長,原來的食物消失;第六步,讓玩家輸入控制指令,讓蛇在下一輪循環(huán)的第二步改變運(yùn)動方向;第七步,第二輪循環(huán)的第一步,重復(fù)第一輪的步驟;
B:第四步,蛇碰到自己或墻壁,終止游戲。
結(jié)束部分:
游戲結(jié)束時(shí),顯示“GAME OVER”,已經(jīng)是約定俗成的規(guī)律了,我的游戲也不例外。除了游戲結(jié)束畫面外,我還設(shè)置了一個(gè)游戲退出畫面,“善始善終”嘛。
有了上述的大致劃分,我把整個(gè)程序劃分成(13+2)個(gè)模塊(其實(shí)就是函數(shù))
2.2.3程序結(jié)構(gòu)(流程圖)
圖2.1流程圖
依據(jù)所需要處理的任務(wù)要求,規(guī)劃輸入數(shù)據(jù)和輸出結(jié)果,決定存放數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
C語言中數(shù)據(jù)結(jié)構(gòu)集中體現(xiàn)在數(shù)據(jù)類型上,因此在進(jìn)行C語言程序設(shè)計(jì)時(shí),應(yīng)統(tǒng)籌規(guī)劃程序中所使用的變量,數(shù)組,指針等,以及它們的類型等。這點(diǎn)是很重要的,如果在此期間選擇不合適的變量或者數(shù)組,將來修改就十分困難。
現(xiàn)在分析一下貪吃蛇游戲中的元素,繼而得出與它們對應(yīng)的在程序中的描述:
蛇:
基本描述:長度,顏色,位置。
對應(yīng)數(shù)據(jù)與數(shù)據(jù)類型:長度—雖然可以用坐標(biāo)表示,但是這樣的話,運(yùn)算量將很大,所以換算成較大的單位—節(jié)數(shù),以固定長度的每節(jié)描述;坐標(biāo)--整型;顏色--整型; 位置--X,Y坐標(biāo)。
增加的描述:蛇運(yùn)動的方向,蛇的生命。
對應(yīng)數(shù)據(jù)與數(shù)據(jù)類型:這些描述是為了與程序的按鍵的輸入部分與判斷游戲結(jié)束部分相聯(lián)系而設(shè)的。方向只有四個(gè)方向:上下左右??梢栽O(shè)置與之對應(yīng)的四個(gè)整型數(shù):3、4、2、1。生命就只有兩種情況:死或生,對應(yīng)0或1。
食物:
基本描述:顏色,位置。
對應(yīng)數(shù)據(jù)與數(shù)據(jù)類型:由于顏色設(shè)成固定的,所以不再討論。位置—X、Y坐標(biāo)。
增加的描述:食物的存在。
對應(yīng)數(shù)據(jù)與數(shù)據(jù)類型:這是為了避免重復(fù)出現(xiàn)食物而設(shè)置的,與繪制食物的函數(shù)有聯(lián)系。只有兩個(gè)值:0或1(沒有食物或有食物)
其他的元素:墻,由于它在顯示上是作為背景而存在的,所以并沒有什么說明實(shí)際的墻壁就是四條直線組成的邊框,由坐標(biāo)描述。
還需要的變量:鍵盤鍵入的鍵值(作為全局變量,整型);經(jīng)常要使用的循環(huán)變量;自定義的填充圖案;說明文字的字符數(shù)組;游戲的記分;游戲的速度(蛇的速度)。
圖2.2蛇的不停運(yùn)動的關(guān)鍵算法的流程圖
2.2.4各模塊的功能及程序說明
主要模塊的實(shí)現(xiàn)思路和算法的流程圖說明:
關(guān)鍵所在——蛇不停移動的Snakemove():
蛇的不停移動,就是蛇的下一節(jié)取代前一節(jié)的位置,在計(jì)算機(jī)中就是蛇下一節(jié)的位置坐標(biāo)變成前一節(jié)的位置坐標(biāo)。在上文中,已定義蛇的位置坐標(biāo)為數(shù)組類型,一組坐標(biāo)對應(yīng)一節(jié)的位置,假設(shè)有i+1節(jié),由0到i節(jié),第i節(jié)的坐標(biāo)取第i-1節(jié)的坐標(biāo),第i-1節(jié)的坐標(biāo)取第i-2節(jié)的坐標(biāo)……直到第1節(jié)取第0節(jié)的坐標(biāo)。而第0節(jié)的坐標(biāo),即蛇頭的坐標(biāo)要往某個(gè)方向變化,變化量為蛇每節(jié)的長度。蛇的這種坐標(biāo)輪換需要循環(huán)語句使其繼續(xù)下去。
2.2.5程序結(jié)果
運(yùn)行程序得到如下初始界面圖:
圖2.3程序結(jié)果圖
用一個(gè)小矩形表示蛇的一節(jié)身體,身體每長一節(jié),增加一個(gè)矩形塊,蛇頭用兩節(jié)表示:
圖2.4程序結(jié)果圖
蛇沒有碰到自己或墻壁,蛇繼續(xù)前進(jìn):
圖2.5程序結(jié)果圖
游戲結(jié)束時(shí),顯示“GAME OVER”
圖2.6程序結(jié)果圖
2.3程序源代碼及注釋
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戲速度自己調(diào)整*/
struct Food{
int x;/*食物的橫坐標(biāo)*/
int y;/*食物的縱坐標(biāo)*/
int yes;/*判斷是否要出現(xiàn)食物的變量*/
}food;/*食物的結(jié)構(gòu)體*/
struct Snake{
int x[N];
int y[N];
int node;/*蛇的節(jié)數(shù)*/
int direction;/*蛇移動方向*/
int life;/* 蛇的生命,0活著,1死亡*/
}snake;
void Init(void);/*圖形驅(qū)動*/
void Close(void);/*圖形結(jié)束*/
void DrawK(void);/*開始畫面*/
void GameOver(void);/*結(jié)束游戲*/
void GamePlay(void);/*玩游戲具體過程*/
void PrScore(void);/*輸出成績*/
/*主函數(shù)*/
void main(void){
Init();/*圖形驅(qū)動*/
DrawK();/*開始畫面*/
GamePlay();/*玩游戲具體過程*/
Close();/*圖形結(jié)束*/}
/*圖形驅(qū)動*/
void Init(void){
int gd=DETECT,gm;
(EGAVGA_driver);
initgraph(&gd,&gm,"c:\\program files\\winyes\\tc20h\\bgi");
();}
/*開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/
void DrawK(void){
/*();*/
setcolor(11);
(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/
for(i=50;i<=600;i+=10)/*畫圍墻*/ ? {
rectangle(i,40,i+10,49); /*上邊*/
rectangle(i,451,i+10,460);/*下邊*/ ? }
for(i=40;i<=450;i+=10) ?{
rectangle(50,i,59,i+10); /*左邊*/
rectangle(601,i,610,i+10);/*右邊*/ }}
/*玩游戲具體過程*/
void GamePlay(void){
randomize();/*隨機(jī)數(shù)發(fā)生器*/
food.yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/
snake.life=0;/*活著*/
snake.direction=1;/*方向往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇頭*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*節(jié)數(shù)*/
PrScore();/*輸出得分*/
while(1)/*可以重復(fù)玩游戲,壓ESC鍵結(jié)束*/ ? {
while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/ ? ? ?{
if(food.yes==1)/*需要出現(xiàn)新食物*/ ? ? {
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*畫面上有食物了*/ ? ? }
if(food.yes==0)/*畫面上有食物了就要顯示*/ ? ? {
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10); ? ? }
for(i=snake.node-1;i>0;i--)/*蛇的每個(gè)環(huán)節(jié)往前移動,也就是貪吃蛇的關(guān)鍵算法*/ ? ? ? ? {
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1]; ? ? }
/*1,2,3,4表示右,左,上,下四個(gè)方向,通過這個(gè)判斷來移動蛇頭*/
switch(snake.direction) ? ? {
case 1:snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break; ? ? }
for(i=3;i<snake.node;i++)/*從蛇的第四節(jié)開始判斷是否撞到自己了,因?yàn)樯哳^為兩節(jié),第三節(jié)不可能拐過來*/ ? ? {
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) ? ? ? ?{
GameOver();/*顯示失敗*/
snake.life=1;
break; ? ? ? ?} ? ? ? ?}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
snake.y[0]>455)/*蛇是否撞到墻壁*/ ? ?{
GameOver();/*本次游戲結(jié)束*/
snake.life=1; /*蛇死*/ ? ?}
if(snake.life==1)/*以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ ? ?{
setcolor(0);/*把畫面上的食物東西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
/*新的一節(jié)先放在看不見的位置,下次循環(huán)就取前一節(jié)的位置*/
snake.node++;/*蛇的身體長一節(jié)*/
food.yes=1;/*畫面上需要出現(xiàn)新的食物*/
score+=10;
PrScore();/*輸出新得分*/ ? ?}
setcolor(4);/*畫出蛇*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最后一節(jié)*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); ? ? } ?/*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循環(huán)*/
break;
key=bioskey(0);/*接收按鍵*/
if(key==ESC)/*按ESC鍵退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判斷是否往相反的方向移動*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/}
/*游戲結(jié)束*/
void GameOver(void){
();
PrScore();
setcolor(RED);
(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();}
/*輸出成績*/
void PrScore(void){
char str[10];
(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);}
/*圖形結(jié)束*/
void Close(void){
getch();
();
}
蘋果、圍墻與主義:一條貪吃蛇的 21 種哲學(xué)困境
某天網(wǎng)上沖浪?,發(fā)現(xiàn)一款叫做 Snakisms 的貪吃蛇變種游戲。對于一個(gè)好久不玩游戲的人來說,這款游戲讓我沉迷了好一會兒,也折磨了我好一會兒?;叵胍幌律弦淮瓮尕澇陨撸孟襁€是在諾基亞手機(jī)上。
有趣的是,這個(gè)貪吃蛇游戲有 21 種不同的模式,每種模式都內(nèi)置了一種「主義」(-ism)。在這 21 種不同主義信仰下的平行宇宙里,這條貪吃蛇堅(jiān)強(qiáng)地活著。
《舊約 · 創(chuàng)世紀(jì)》里講到蛇引誘夏娃去吃了生命之樹上的果子,從此有了智慧開了眼,卻引來被逐出伊甸園的下場。而蛇被詛咒用肚皮走路并終生吃土。
后來,人類為了紀(jì)念這條蛇,發(fā)明了貪吃蛇游戲。
貪吃蛇游戲里有 4 個(gè)最明顯的元素:蘋果(apple)、圍墻(walls)、蛇(snake)、玩家(player)。但是,很多時(shí)候我們都忘記了還有一個(gè)游戲設(shè)計(jì)里最重要最隱藏的元素:動機(jī)(motive)。很多游戲我們在玩兒的時(shí)候覺得理所當(dāng)然,其實(shí)每個(gè)游戲背后的動機(jī)都非常值得推敲。
與此類似,在現(xiàn)實(shí)生活中,我們每個(gè)人可能都有一套自己的生活「哲學(xué)」,也有些人信仰宗教,也有些人堅(jiān)持某種主義。這些哲學(xué)/主義/信仰不知不覺在暗中塑造了我們的世界,你在其中的心理和行為很大程度上都受到它們的影響。
游戲作者 Pippin Barr 在這款游戲的簡介里寫到:
好,少廢話,下面就讓我?guī)阋黄鹜嫱孢@ 21 種不同「信仰」模式下的貪吃蛇游戲??纯雌渲杏袥]有你信仰的「主義」,也看看這些主義讓這條貪吃蛇陷入到了怎樣的哲學(xué)困境中:
? 擬人論
在這個(gè)模式下,蘋果和蛇是一樣會動的。能不能吃到蘋果,要看你的技術(shù),也要看你的運(yùn)氣。
? 末日論/降臨派
是的,在這個(gè)模式下,你玩著玩著,世界就毀滅了。
? 禁欲主義
這個(gè)模式下,只要不吃蘋果,你的得分會一直增加。但是,如果你控制不住自己的欲望想要吃蘋果,分?jǐn)?shù)立刻歸零且死去。
? 資本主義
打開這個(gè)模式,你的賬戶里有 $ 50,吃一個(gè)蘋果減少 $ 10,很快你就吃不起蘋果了。
Casualism? 偶然論/隨機(jī)論
這個(gè)模式一打開,眼花繚亂。好隨機(jī)。好偶然。
? 保守主義
這個(gè)模式,就是最傳統(tǒng)的貪吃蛇游戲。
? 決定論
這個(gè)模式下,你無法控制游戲。系統(tǒng)在支配著貪吃蛇吃蘋果。
Dualism? 二元論
這個(gè)下,有兩個(gè)狀態(tài)貪吃蛇,一個(gè)是貪吃蛇的 mind,一個(gè)是貪吃蛇的 body。你要手動控制貪吃蛇的 body,還要用你自己的 mind 去控制貪吃蛇的 mind。
? 存在主義
打開這個(gè)模式,就是這樣的:
還記不記得《黑客帝國》里,讓 Neo 迷失的那個(gè)地鐵站?
Holism? 整體論
在這個(gè)模式下,大家全都一起動?。ㄠ似饋恚。?br>
Idealism? 唯心主義
打開這個(gè)模式,想象一下你正在玩貪吃蛇游戲...
Monism? 一元論
進(jìn)入這個(gè)模式,你什么都可以吃。
? 自我崇拜
進(jìn)入這個(gè)模式,其實(shí)就是最傳統(tǒng)的貪吃蛇游戲。但是...
但是游戲結(jié)束的時(shí)候,系統(tǒng)會自動發(fā)一封贊美的郵件給游戲的制作者...
Nihilism
虛無主義
打開這個(gè)模式,就是一片黑屏的虛無。按什么鍵都沒用,要返回游戲菜單,你需要刷新網(wǎng)頁。
虛無。
Optimism
樂觀主義
這個(gè)模式下,圍墻里的蘋果會越來越多,多到你根本吃不完。
但是,貪吃蛇永遠(yuǎn)都長不大。
Pessimism
悲觀主義
打開這個(gè)模式,你會看到圍墻變得狹小,而蘋果又在墻外。
? 實(shí)證主義
打開整個(gè)模式,你只能看到前進(jìn)方向的圍墻,蘋果也不知道在哪個(gè)方向。另外,你永遠(yuǎn)也看不到自己的尾巴。
Post-? 后末世主義
打開整個(gè)模式,就是貪吃蛇世界末日之后的廢墟,散落的圍墻磚塊,不見蹤影的蘋果,行動變得艱難,維持生存成了首要目的。
? 浪漫主義
打開整個(gè)模式,貪吃蛇每吃一個(gè)蘋果,屏幕就會閃現(xiàn)一句情話,主題是:你為什么把我無情的留在這里懲罰我,我不能沒有你。到最終貪吃蛇撞墻死去,它終于得到了救贖,可以和它心愛的人永遠(yuǎn)在一起了。
Stoicism? 斯多葛主義
在這個(gè)模式下,貪吃蛇撞到墻不會死,咬到自己不會死。游戲可以一直進(jìn)行下去。
一條堅(jiān)韌的貪吃蛇。
? 功利主義
在這個(gè)模式下,貪吃蛇只有兩條行動路徑。一條路徑上有 5 個(gè)蘋果,另一條路徑上只有 1 個(gè)。
嗯,貪吃蛇界的“電車難題”。
當(dāng)然,除了游戲中的這 21 種信仰/主義/哲學(xué),我們的這個(gè)世界上還同時(shí)存在著成千上萬種的主義哲學(xué),一個(gè)人甚至也可以同時(shí)擁有多種信仰。
游戲是另一種「真實(shí)」,角色,場景,動機(jī)設(shè)置構(gòu)成的綜合體驗(yàn),讓我們在游戲里尋找著特定的意義。
如果把你的一生看成一場游戲,或許采取什么游戲策略并不重要,因?yàn)槟懔嗽鯓拥男叛?,你就給自己構(gòu)建了一個(gè)怎樣的世界。而在這個(gè)世界里,你所做的一切好像都是理所當(dāng)然。
如果你對這個(gè)游戲中的 21 種主義或哲學(xué)思想有興趣的話,可以自己去找資料來看看。
但是我的建議是: Don't do that. 每個(gè)都是坑,爬不上來的坑。
另外,如果你是經(jīng)典游戲愛好者,也可以玩一玩作者開發(fā)的其他兩款經(jīng)典游戲變種:
PONGS:
BREAKSOUT:
Life is .
Have fun!?
畢設(shè)寫貪吃蛇能過嗎
能。
1、貪吃蛇簡單些,而且可擴(kuò)展的不少,方面多,如果不好好考慮和設(shè)計(jì),將難以成功開發(fā)出這個(gè)游戲。
2、在這個(gè)游戲設(shè)計(jì)中,牽涉到圖形界面的顯示與更新、數(shù)據(jù)的收集與更新,并且在這個(gè)游戲的開發(fā)中,還要應(yīng)用c語言的圖形庫函數(shù)。
3、在設(shè)計(jì)開發(fā)過程中,要對c語言的圖形庫函數(shù)有一定的了解,利用圖形庫函數(shù)實(shí)現(xiàn)一些功能。
貪吃蛇,俄羅斯方塊的來歷,背景??
這一人們喜聞樂見的游戲成功的秘訣,在于抓住了我們重復(fù)排列與使用的心理樂趣。
幾何圖形從屏幕上方緩緩降落,你要做的就是控制其降落方式,并與其他圖形排列消除。游戲的初衷很簡單,但加上了令人上癮的背景電子音樂后(據(jù)說來自俄羅斯民謠),人們的娛樂生活發(fā)生了翻天覆地的變化。
自從1986年俄羅斯方塊問世后,這一簡單的游戲耗去了玩家數(shù)百萬個(gè)小時(shí)。從那時(shí)起,從《使命召喚》到《魔獸世界》,游戲操縱平臺的外觀和性能都在茁壯發(fā)展。但像俄羅斯方塊這樣的方塊益智類游戲,始終占據(jù)了我們心中的一席之地。為何它們?nèi)绱私?jīng)久不衰呢?
作家杰弗里·戈德史密斯是沉迷于俄羅斯方塊不能自拔,乃至于他寫了一篇著名的文章,文中提到俄羅斯方塊的發(fā)明者阿里克謝·帕吉諾特夫,是否發(fā)明了一種“癮藥”——讓人可以玩出癮。
一些人說自己連玩了幾小時(shí)俄羅斯方塊后,連夢里都會出現(xiàn)降落的方塊,還有看街上的大樓都在移動——這是一種名為“俄羅斯方塊效應(yīng)”的現(xiàn)象。這是游戲產(chǎn)生的心理推動作用,還有建議稱那些患有創(chuàng)傷后精神緊張性障礙的人們,需要預(yù)防游戲產(chǎn)生的幻覺重現(xiàn)。
當(dāng)我十幾歲的時(shí)候,也有過一段俄羅斯方塊沉迷期,我花了很多時(shí)間在方塊的排列組合上。最近,我開始反思為什么俄羅斯方塊這類游戲能夠長青。說說我的結(jié)論吧,植根人們心中的心理驅(qū)使作用,是整理這些方塊的關(guān)鍵。
很多游戲的宗旨大體都是整理消除。落袋臺球(snooker)就是典型的例子(對于非英國人來說叫做pool)。第一個(gè)人把球打亂后,其他人依照不同規(guī)則輪流將球射入落袋里。俄羅斯方塊在這一基本框架中,加入了電腦控制的成分——不光是玩家要整理方塊,電腦還會不斷從上方扔下額外的方塊來制造凌亂。游戲看起來就是整一個(gè)漫無目的的過程,完全沒有寓教于樂的成分在內(nèi),也沒有深遠(yuǎn)的社交或是心理意義,但是我們卻意外地為此著迷。
這當(dāng)中存在著一種名為“蔡加尼克效應(yīng)”的典型心理現(xiàn)象,命名自俄羅斯心理學(xué)家布魯瑪·蔡加尼克。19世紀(jì)30年代,蔡加尼克在一家人來人往的咖啡館里,發(fā)現(xiàn)服務(wù)員的記憶力都很驚人——但是只能保持到餐點(diǎn)送到為止。他們能記住一桌12人點(diǎn)的東西,不過一旦食物和飲料上桌后他們立馬忘得一干二凈,也回想不起之前穩(wěn)固的記憶。蔡加尼克將這種把未完成的任務(wù)堅(jiān)持保留在記憶中的現(xiàn)象,以自己的名字命名。
蔡加尼克效應(yīng)也是智力節(jié)目如此受歡迎的原因之一。你可能不關(guān)心英國廣播公司是在幾幾年成立的,或者全球至少有一家麥當(dāng)勞的占了多少,但是一旦出了這樣的問題,不知道答案居然就會渾身不舒服(順便答案是1927年和61%)。問題在被解答前一直會繚繞在腦海中。
游戲原理
俄羅斯方塊通過不斷創(chuàng)建任務(wù)而牢牢抓住我們的神經(jīng)。
游戲中的每個(gè)環(huán)節(jié)都引領(lǐng)者我們解決謎團(tuán),排成或完成一列后圖形會消失,但是新的也在不斷出現(xiàn),周而復(fù)始。部分解決與新形成的任務(wù)鏈用來打發(fā)時(shí)間很方便,反復(fù)的滿足與焦慮感填滿了每時(shí)每刻。
另一個(gè)俄羅斯方塊風(fēng)靡的原因在于,未完成的任務(wù)與潛在的解決方法并存——徐徐降臨的每一種方塊都有各自的安插方式。
俄羅斯方塊是一個(gè)簡單的可視世界,通過操縱五個(gè)按鍵(當(dāng)然是向左、向右、左轉(zhuǎn)、右轉(zhuǎn)和降落)能夠迅速地得出解決方案。對俄羅斯方塊玩家的研究結(jié)果顯示,人們普遍喜歡通過旋轉(zhuǎn)方塊來看它們是否匹配,而不是一邊看著方便降落一邊思考。當(dāng)然這兩種方法都可行,但在俄羅斯方塊的世界里永遠(yuǎn)是動作領(lǐng)先——這是吸引人的關(guān)鍵。和生活中不太相同的是,俄羅斯方塊將我們處理問題時(shí)的所見所想直接聯(lián)系到了一起,我們能立即對問題采取行動。
蔡加尼克效應(yīng)是對一種現(xiàn)象的形容,但它無法解釋起因和作用。這是心理學(xué)家常用的把戲,看似他們通過命名而解開了人類的難解之謎,其實(shí)他們所做的僅僅是貪心地用自己的名字命名,而根本沒解決問題。對這一現(xiàn)實(shí)的合理解釋是,大腦回路在達(dá)成目標(biāo)的過程中會重組。如果這一目的達(dá)成,思路就會轉(zhuǎn)移到其他事物上。
益智游戲利用心理達(dá)標(biāo)原理,不斷挫敗我們直至我們滿意。俄羅斯方塊則更進(jìn)一步在失敗與成功之間創(chuàng)建了持續(xù)的鏈條。正如聰明的寄生蟲一般,俄羅斯方塊善于利用人們完成與再使用的心理樂趣。
我們一邊玩著一邊短暫地陶醉于排列方塊的樂趣中,哪怕我們?nèi)烁裰欣碇桥c成熟的部分明白,這基本上是個(gè)毫無意義的.
利用解釋型語言編寫的貪吃蛇程序什么意思
用C語言來實(shí)現(xiàn)也是一個(gè)好玩的事情。這個(gè)游戲我寫完后放在知乎,竟然點(diǎn)贊的人數(shù)超級多。我覺得大家喜歡,一個(gè)方面是因?yàn)閷懙煤唵?,大家都能看得懂,一個(gè)可擴(kuò)展性還是非常強(qiáng)的。
我試了說一下這個(gè)代碼 核心的三個(gè)函數(shù)
menu();
setup();
draw();
menu用來設(shè)置菜單,也就是我們一運(yùn)行看到的那個(gè)。setup用來設(shè)置參數(shù),我們需要設(shè)置高度和寬度,還有分?jǐn)?shù),食物的位置。draw也就是畫,也就是畫整個(gè)畫面。
還有一個(gè)枚舉類型 這個(gè)結(jié)構(gòu)體用來設(shè)置蛇的幾個(gè)狀態(tài),我覺得這個(gè)也是面向?qū)ο缶幊痰囊粋€(gè)思想,把蛇的狀態(tài)都封裝成一個(gè)枚舉類型。
typedef enum
{
STOP = 0,
LEFT,
RIGHT,
UP,
DOWN
}Direction;
還有
/*判斷貪吃蛇的長度*/
void logic()
這個(gè)函數(shù),這個(gè)函數(shù)應(yīng)該是整個(gè)貪吃蛇的精髓了,要理解代碼怎么把蛇給連接起來。用了點(diǎn)巧妙的東西。
來看這里面的關(guān)鍵代碼
/*把上一個(gè)位置記下*/
int lastX = tailX[0];
int lastY = tailY[0];
int last2X, last2Y;
/*重新獲取當(dāng)前的位置*/
tailX[0]=x;
tailY[0]=y;
int i=0;
/*遍歷整條蛇的長度 把 0 的位置空出來,其余蛇的位置往后面的空間移動*/
for(i=1; i ntail;i++)
{
last2X = tailX[i];
last2Y = tailY[i];
tailX[i]=lastX;
tailY[i]=lastY;
lastX = last2X;
lastY = last2Y;
}
lastX lastY 用來存上一次的蛇頭的位置。后面的 for 循環(huán),通過tail 蛇的長度,把蛇上個(gè)狀態(tài)給保存到數(shù)組tailX tailY里面。
完整代碼
#include stdio.h
#include stdlib.h
#include stdbool.h
#include Windows.h
#include time.h
#include conio.h /*鍵盤輸入獲取*/
bool gameOver;
bool stop = false;
bool hit = false;
/*游戲的邊框大小*/
const int width = 50;
const int height = 20;
/*蛇的坐標(biāo),食物的坐標(biāo)還有分?jǐn)?shù)*/
int x,y,fruitX,fruitY,score;
/*蛇每個(gè)點(diǎn)的坐標(biāo)*/
int tailX[200],tailY[200];
/*蛇的默認(rèn)長度*/
int ntail=3;
typedef enum
{
STOP = 0,
LEFT,
RIGHT,
UP,
DOWN
}Direction;
Direction Dir;
/*開始菜單*/
void menu()
{
int a;
printf( ------------------------------------------------------------------\n
printf( | 貪吃蛇游戲 |\n
printf( | 1) 新游戲 |\n
printf( | 2) 開始邊界 |\n
printf( | 3) 退出游戲 |\n
printf( ------------------------------------------------------------------\n
printf( ---- 請輸入你的選擇:
scanf( %d ,
}
/*初始化狀態(tài)*/
void setup()
{
gameOver = false;
/*根據(jù)當(dāng)前時(shí)間設(shè)置“隨機(jī)數(shù)種子”*/
srand(time(NULL));
Dir = STOP;
/*貪吃蛇的位置,固定在中間*/
x= width/2;
y= height/2;
/*食物的位置,位置是隨機(jī)的*/
fruitX = rand()%width;
fruitY = rand()%height;
score = 0;
}
/*繪制界面*/
void draw()
{
if(stop == true)
{
return;
}
system( cls /*清除屏幕*/
printf( 分?jǐn)?shù):%d ,score);
printf( \n
/*第一行*/
int i;
for(i= 0 ;i width+1;i++)
{
printf( -
}
printf( \n
/*畫中間的畫面*/
int p;
for(p= 0 ;p height;p++)/*高度*/
{
int q;
for(q= 0 ;q width;q++)/*寬度*/
{
/*第一行最后已給字符*/
if(q==0 || q==width-1)
{
printf( |
}
if(p == fruitY q == fruitX)/*食物的隨機(jī)坐標(biāo)*/
{
printf( O
}
else
{
int k=0;
bool print = false;
/*貪吃蛇的長度 默認(rèn)長度是 3*/
for(k=0;k ntail;k++)
{
if(tailX[k]==q tailY[k]==p)
{
printf( *
print = true;
}
}
/*如果這個(gè)位置打印了 * 就不要打印空格了*/
if(!print)
{
printf(
}
}
}
printf( \n
}
/*最后一行*/
int j;
for(j= 0 ;j width+1;j++)
{
printf( -
}
}
/*按鍵輸入控制*/
void input()
{
if(_kbhit())
{
/*獲取鍵盤的輸入字符*/
switch(_getch())
{
case 4 :
case 75:/*左鍵*/
Dir = LEFT;
hit= true;
break;
case 8 :
case 72:/*上鍵*/
Dir = UP;
hit= true;
break;
case 6 :
case 77:/*右鍵*/
Dir = RIGHT;
hit= true;
break;
case 2 :
case 80:/*向下鍵盤鍵 */
Dir = DOWN;
hit= true;
break;
case x :
case 27:/*ESE*/
gameOver = true;
break;
case 32:/*空格 暫停鍵*/
stop = !stop;
break;
}
}
else if(!hit stop == false)/*如果沒有改變方向*/
{
x++;
}
}
/*判斷貪吃蛇的長度*/
void logic()
{
if(stop == true)
{
return;
}
/*把上一個(gè)位置記下*/
int lastX = tailX[0];
int lastY = tailY[0];
int last2X, last2Y;
/*重新獲取當(dāng)前的位置*/
tailX[0]=x;
tailY[0]=y;
int i=0;
/*遍歷整條蛇的長度 把 0 的位置空出來,其余蛇的位置往后面的空間移動*/
for(i=1; i ntail;i++)
{
last2X = tailX[i];
last2Y = tailY[i];
tailX[i]=lastX;
tailY[i]=lastY;
lastX = last2X;
lastY = last2Y;
}
/*根據(jù)方向來改變x y 的值*/
switch(Dir)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if(x 0 || width x || y 0 || height y)
{
gameOver = true;
/*清除屏幕*/
system( cls
printf( ------------------------------------------------------------------\n
printf( | |\n
printf( | |\n
printf( | 游戲結(jié)束 |\n
printf( | |\n
printf( | |\n
printf( ------------------------------------------------------------------\n
}
if(x==fruitX y==fruitY)
{
/*吃了一個(gè)食物,蛇的長度增加1*/
ntail++;
score+=10;
/*更新下一個(gè)食物的位置*/
fruitX = rand()%width;
fruitY = rand()%height;
}
}
int main()
{
#if 0
while(1)
{
printf( %d\n ,_getch());
}
#endif
menu();
setup();
draw();
/*循環(huán)畫貪吃蛇的界面*/
while(!gameOver)
{
draw();
input();
logic();
Sleep(70);
}
return 0;
}
上面這段代碼直接在Dev C++上面應(yīng)該是可以運(yùn)行的,很多人在知乎上私信問我,為什么我的貪吃蛇執(zhí)行不了呢,可能就是平臺不同,少了這個(gè)頭文件,少了那個(gè)頭文件,但是你為什么不能跟我一樣,用Dev C++呢,輕量級,簡單。代碼的精髓是什么?我認(rèn)為精髓一定是思想,不是你寫了多少行代碼,用了什么高端的IDE。
我自認(rèn)為我的注釋已經(jīng)寫得不錯了,所以就沒有什么好說明的了吧,有不明白的把代碼過一下,至于屏幕刷新這個(gè)東西,如果只是用時(shí)間刷新就會閃屏,所以出現(xiàn)了一個(gè)雙緩存,把要顯示的東西送到一個(gè)buff里面去,另一個(gè)buff用來顯示,這樣就可以保證不會出現(xiàn)閃屏。除了寫貪吃蛇,可以用這個(gè)方法寫其他小程序,挺有意思的。
在知乎上,發(fā)起了一個(gè)C語言 100 行代碼之內(nèi)實(shí)現(xiàn)貪吃蛇的問題。我覺得很不錯,里面很多同學(xué)的回復(fù)都非常贊,特別是葉大神的回復(fù)。
.png
學(xué)習(xí)C/C++編程知識,想要成為一個(gè)更加優(yōu)秀的程序員,或者你學(xué)習(xí)C/C++的時(shí)候有難度,可以來UP主頁的C++編程學(xué)習(xí)圈,里面不僅有學(xué)習(xí)視頻和文件資料,還有更多志同道合的朋友,歡迎初學(xué)者和想轉(zhuǎn)行的朋友,和大家一起交流成長會比自己琢磨更快哦! UP也上傳了一些C/C++學(xué)習(xí)的視頻教程和C語言基礎(chǔ)教程,有興趣的小伙伴可以看看~ 謝謝閱讀!
文章知識點(diǎn)與官方知識檔案匹配
C技能樹首頁概覽
115488 人正在系統(tǒng)學(xué)習(xí)中
點(diǎn)擊閱讀全文
打開CSDN APP,看更多技術(shù)內(nèi)容
C語言之出圈游戲(詳解)
PTA7-5 出圈游戲 用指針實(shí)現(xiàn)以下功能:有n個(gè)人圍成一個(gè)圈,順序排號。從第1個(gè)人開始報(bào)數(shù)(從1到3報(bào)數(shù)),凡報(bào)到3的人退出圈子,問最后留下的是原來的第幾號。 (1)編程提示 每三個(gè)人離開,置為0;當(dāng)數(shù)到最后一個(gè)人時(shí),將指針重新指向第一個(gè)人;m表示離開的人數(shù),當(dāng)m=n-1時(shí),說明只剩下一個(gè)人,循環(huán)結(jié)束。 輸入樣例: 10 輸出樣例: 4 上面是題目的要求。 本小白的思路是讓n個(gè)人形成一個(gè)一維數(shù)組,每次判斷該人是不是要離開, 如果離開,這就不添加到這個(gè)一維數(shù)組里,并記錄下來離開的人數(shù),否則,就在數(shù)組里加上這
繼續(xù)訪問
9718 整數(shù)因子分解(優(yōu)先做)
9718 整數(shù)因子分解(優(yōu)先做)輸入格式輸出格式輸入樣例輸出樣例 時(shí)間限制:1000MS 代碼長度限制:10KB 提交次數(shù):0 通過次數(shù):0 題型: 編程題 語言: G++;GCC;VC 大于1的正整數(shù) n 都可以分解為 n = x1 * x2 * … * xm, 每個(gè)xi為大于1的因子,即1<xi<=n 。 例如:當(dāng)n=12時(shí),共有8種不同的分解式: 12 = 12 12 = 62 12 = 43 12 = 34 12 = 322 12 =
繼續(xù)訪問
【C語言】鏈表——圈中游戲問題(數(shù)到3退出)
問題描述: 有n個(gè)人圍成一圈,從第1個(gè)人開始報(bào)數(shù)1、2、3,每報(bào)到3的人退出圈子。使用鏈表找出最后留下的人。
繼續(xù)訪問
套圈游戲c語言程序設(shè)計(jì)教程課后答案,概率統(tǒng)計(jì)習(xí)題帶答案
概率論與數(shù)理統(tǒng)計(jì)習(xí)題及題解沈志軍 盛子寧第一章 概率論的基本概念1.設(shè)事件B A ,及B A 的概率分別為q p ,及r ,試求)(),(),(B A P B A P AB P 及)(AB P2.若C B A ,,相互獨(dú)立,試證明:C B A ,,亦必相互獨(dú)立。3.試驗(yàn)E 為擲2顆骰子觀察出現(xiàn)的點(diǎn)數(shù)。每種結(jié)果以),(21x x 記之,其中21,x x 分別表示第一顆、第二顆骰子的點(diǎn)數(shù)。設(shè)事件}10...
繼續(xù)訪問
c語言貪吃蛇設(shè)計(jì)意義,C語言貪吃蛇設(shè)計(jì)理念.pdf
基于C語言的 “貪吃蛇”游戲的設(shè)計(jì)與實(shí)現(xiàn)摘3.功能描述 本游戲主要實(shí)現(xiàn)以下幾種功能:“貪吃蛇”游戲貪 游 游吃 戲 戲蛇 顯 分的 ...
繼續(xù)訪問
熱門推薦 一個(gè)好玩的小游戲(純C語言編寫)
最近在看知乎是發(fā)現(xiàn)了一個(gè)這一個(gè)專欄 從中獲取的許多知識,本文中的游戲也是從里面學(xué)到的,不過本人又自己加了一些功能。 這是一個(gè)類似于飛機(jī)大戰(zhàn)的游戲,不過目前代碼量比較小,所以看起來非常簡陋游戲界面如下 更新日志,本人將原來的原來的代碼有進(jìn)一步的優(yōu)化了一下,之前是只有一個(gè)非常小的戰(zhàn)機(jī)現(xiàn)在更新后可以產(chǎn)生一個(gè)非常大的戰(zhàn)機(jī)(看起來也更
繼續(xù)訪問
如何用C語言實(shí)現(xiàn)圈叉游戲(-)
今天情人節(jié),還是在學(xué)習(xí)C語言 自己寫了一遍發(fā)現(xiàn)自己寫的沒有書上的代碼更簡練 就把書上的代碼稍微修改了一下 下面看游戲界面 和昨天的米字棋差不多,有時(shí)間會結(jié)合米字旗的代碼做些修改
繼續(xù)訪問
C語言:圍圈報(bào)數(shù)游戲
游戲規(guī)則:有N個(gè)人圍成一圈,順序排號,從第一個(gè)人開始1到D報(bào)數(shù),,凡報(bào)到D的人退出圈子(下場),問最后留下來的是原來的第幾號? 邏輯思想:用布爾數(shù)組記下每個(gè)人的上場狀態(tài),1為上場,0為下場,開始游戲后每D個(gè)狀態(tài)為1的人將狀態(tài)改為0(即下場),重復(fù)下場動作N-1次后可知剩下一人,遍歷數(shù)組找出剩下的狀態(tài)為1的人即可。 代碼如下: #include<stdio.h> #define N 1000 //參與的總?cè)藬?shù) #define D 3 //每D個(gè)人報(bào)數(shù)下場 int main() { /
繼續(xù)訪問
數(shù)圈圈
26個(gè)大寫字母里面,有一部分字母是帶有圈的,比如A有1個(gè)圈,B有2個(gè)圈,C沒有圈, 給你一個(gè)帶有n個(gè)大寫字母組成的字符串,請問一共有多少個(gè)圈圈。 你可以將字母中完全封閉的一個(gè)區(qū)域當(dāng)作一個(gè)圈 輸入描述: 第一行輸入一個(gè)整數(shù)t,代表有t組測試數(shù)據(jù), 對于每組測試數(shù)據(jù), 第一行輸入一個(gè)整數(shù)n代表字符串的長度, 第二行輸入一個(gè)長度為n的字符串S,保證只由大寫字母組成。 1<=t<=10 1<=n<=1*10^5 輸出描述: 對于每組測試數(shù)據(jù),輸出一個(gè)整數(shù)代表這個(gè)字符串共有多少個(gè)圈圈。 并且對
繼續(xù)訪問
C語言圍圈游戲
玩游戲,一共 N( 1≤N≤1000 )個(gè)人圍成一圈,從某個(gè)人起順時(shí)針順序編號為 1 ~ N 號。 游戲只能有一個(gè)人贏,船長讓大家數(shù)數(shù),從編號為 1 的人開始順時(shí)針報(bào)數(shù),每輪從 1 報(bào)到 M 號( 1≤ M ),凡報(bào)到 M 的人視為出局,接著又從緊鄰的下一個(gè)人開始同樣的報(bào)數(shù)(緊鄰的下一個(gè)人又報(bào) 1 )。 依次輸入人數(shù) N ,和報(bào)數(shù)規(guī)則的末數(shù) M ,中間隔一個(gè)空格。輸出能贏的相應(yīng)編號R。 #include<stdio.h> int main() {...
繼續(xù)訪問
圈中游戲
有n個(gè)人圍成一圈,從第1個(gè)人開始報(bào)數(shù)1、2、3,每報(bào)到3的人退出圈子。編程使用鏈表找出最后留下的人。 bug版本 #include <stdio.h> #include <stdlib.h> struct player { long num; struct player *next; }; typedef struct player NODE; NODE *create(int n) { NODE *head, *tail, *p; int i =
繼續(xù)訪問
c語言圈中的游戲,C語言實(shí)現(xiàn)掃雷游戲
本文將介紹如何用C語言多文件編程實(shí)現(xiàn)掃雷該示例掃雷程序可實(shí)現(xiàn)以下幾個(gè)功能:自定義雷數(shù)踩雷后會將所有雷顯示出來地圖大小易修改Mine_clearance.h#pragma once#define _CRT_SECURE_NO_WARNINGS#include#include#include#define ROW 11#define COL 11#define 踩雷 0#define 玩家勝利 1in...
繼續(xù)訪問
c語言程序設(shè)計(jì)求各位數(shù)之和,C語言for回圈設(shè)計(jì)輸入一個(gè)正整數(shù),求它的各位數(shù)字之和及位數(shù) 例如234的各位數(shù)之和為9 位數(shù)是3...
C語言for回圈設(shè)計(jì)輸入一個(gè)正整數(shù),求它的各位數(shù)字之和及位數(shù) 例如234的各位數(shù)之和為9 位數(shù)是3以下文字資料是由(歷史新知網(wǎng)www..com)小編為大家搜集整理后發(fā)布的內(nèi)容,讓我們趕快一起來看一下吧!C語言for回圈設(shè)計(jì)輸入一個(gè)正整數(shù),求它的各位數(shù)字之和及位數(shù) 例如234的各位數(shù)之和為9 位數(shù)是3同意二樓,但得改一下# main(int argc, ch...
繼續(xù)訪問
c語言draw函數(shù)使用實(shí)例,使用函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的交換(C語言)
<>題目:使用函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的代碼<>常規(guī)思路:定義函數(shù),調(diào)用函數(shù),完成交換。你的代碼是否和下面一樣呢?#include #include void Swap(int a,int b) { int tmp = a; a =b; b = tmp; } int main() { int x = 10; int y = 20; Swap(x,y); printf("%d %d\n...
繼續(xù)訪問
圈中的游戲 c語言,圈叉棋小游戲的簡單實(shí)現(xiàn)代碼
該樓層疑似違規(guī)已被系統(tǒng)折疊隱藏此樓查看此樓#include int game[3][3]={0};void Show(int turn,int x,int y){int i=0,j=0;if(x>0 && y>0){if(turn%2){game[x-1][y-1]=1;}else{game[x-1][y-1]=-1;}}for(i=0;i<3;++i){for...
繼續(xù)訪問
c語言圈中的游戲,圈叉棋小游戲的簡單實(shí)現(xiàn)代碼
該樓層疑似違規(guī)已被系統(tǒng)折疊隱藏此樓查看此樓#include int game[3][3]={0};void Show(int turn,int x,int y){int i=0,j=0;if(x>0 && y>0){if(turn%2){game[x-1][y-1]=1;}else{game[x-1][y-1]=-1;}}for(i=0;i<3;++i){for...
貪吃蛇幼兒園體育游戲設(shè)計(jì)
【游戲名稱】:
貪吃蛇
【游戲目標(biāo)】:
1、幼兒排成一隊(duì)一個(gè)跟著一個(gè)走
2、在行走的過程中不碰到障礙物,鍛煉幼兒身體的靈敏度
【游戲玩法】:
在寬闊的場地隨意擺放障礙物(比如用廢棄的'禮品盒),請參加游戲的小朋友分散站到場地中,幼兒分成兩組游戲。請兩名名小朋友當(dāng)蛇頭繞著障礙走,遇到場地中的小朋友輕輕摸下頭,被摸頭的小朋友隨即跟到蛇頭后面,繼續(xù)繞障礙物走,直至將所有的小朋友邀請到隊(duì)伍中來走出場地一隊(duì)為勝。
【游戲規(guī)則】:
1、幼兒要一個(gè)跟著一個(gè)走(或是抓住前面幼兒的衣服下擺)不能掉隊(duì)
2、行走過程中不能碰到障礙物,蛇頭不能碰到蛇身、蛇尾,碰到者將退出隊(duì)伍回到場地,等待再次蛇頭邀請
3、每組的蛇頭要將自己組的小朋友都邀請進(jìn)隊(duì)伍才能出場地
貪吃蛇的歷史,背景等相關(guān)問題
蛇引誘夏娃吃了蘋果之后,就被貶為毒蟲,陰險(xiǎn)的象征。
而蛇吃東西是整只動物吞進(jìn)去的,大概在文藝復(fù)興的時(shí)候(好象是那個(gè)時(shí)候但是不確定)就有人發(fā)明的一種游戲,是現(xiàn)在貪吃蛇的前身。后來慢慢的發(fā)展就變成了今天的貪吃蛇了。
蛇引誘夏娃吃了蘋果之后,就被貶為毒蟲,陰險(xiǎn)的象征。
而蛇吃東西是整只動物吞進(jìn)去的,大概在文藝復(fù)興的時(shí)候(好象是那個(gè)時(shí)候但是不確定)就有人發(fā)明的一種游戲,是現(xiàn)在貪吃蛇的前身。后來慢慢的發(fā)展就變成了今天的貪吃蛇
貪吃蛇游戲背景