『壹』 有關VC游戲編程的幾點建議
對於剛剛進入游戲開發領域的初學者,有時候可能會覺得不知道怎樣才能掌握游戲開發的知識和技術。其實,絕大多數的游戲開發,更多的是關於對開發過程的基本了解,而很少是如何寫復雜的代碼。開發者也需要懂得一些游戲開發的竅門。
盡管每個人學習開發的過程會不一樣,然而無論如何,系統的學習方法對每個學習者來說都是至關重要的。對於初學者,應該經常向資深的游戲開發者學習,通過他們的直播和視頻,學習游戲開發的技巧。你從這些專家們身上學到的東西越多,你就可以越快成為優秀的開發者。
對於「系統的學習方法」,大多數人都不會陌生。但事實上不是人人都可以做得到。即使是那些已經工作了多年的開發者,也會忘記或忽視了一些有用的方法。以下,我們一起來分享10條給游戲開發初學者的建議。
大膽思考,從「小」開始
游戲開發的初學者不要只想著開發那些很牛的游戲,例如Quake和Starcraft。我們鼓勵開發者敢於大膽思考,解放自己的思維空間。不過,對於你未來的雄心壯志,最好還是從開發一個小游戲開始,然後再根據你自己的經驗循序漸進。
你可以從一個簡單的游戲開始你的開發工作,尤其是當你要使用一些新工具來開發游戲的時候,盡量先從簡單的游戲開始。例如俄羅斯方塊,這個經典的益智游戲具備了一個成功游戲的所有要素。它只有一個游戲循環,只有當用戶退出的時候才會結束。它使用了視覺化的功能和動畫,變得更有吸引力。另外,它的游戲難度是簡單的,但教會了開發者很多東西。所以,先嘗試著手開發像俄羅斯方塊這樣簡單的游戲,你會獲得全面的學習體驗。
反復嘗試你自己的游戲
游戲要想成功必須要有趣,它要比高端的圖形和故事有趣得多。如果連你自己都無法對自己的游戲產生興趣,那麼沒有人會對它感興趣了。因此,你得反復地嘗試這些游戲,即使它們很簡單。你可以努力從中找到方法,如何使它們變得更有趣和更令人上癮。一旦你滿意了它們的開發效果,你就可以說服別人來玩你的游戲了。你可以邀請不同的人來玩游戲,從小孩到老人,並觀察他們的反應。
如果他們看起來對你的游戲感興趣,這很好。如果他們沒什麼興趣,而且還有不滿,那麼你就知道你的游戲需要改善了。詢問他們的意見,游戲的哪些方面是他們不滿意的,並進行必要的調整。
關注其他游戲開發者
目前游戲行業的廣泛發展令世界的游戲開發者數量呈爆炸性的增長。因此,要在市場上引起關注是很難的。但這並不是一件壞事,因為你可以與很多專家和同行交流,他們可以幫助你成為一名成功的游戲開發者。
你可以關注一些知名的游戲開發者的直播。例如,在 Livecoding.tv上就集結了不少經驗豐富的游戲開發者,他們會直播開發游戲的編碼過程,還會提供視頻,方便有興趣的觀眾進一步了解和學習。
關注新聞
在任何行業,游戲開發的重點取決於目前的趨勢。一個特殊類型的游戲可能會在當前的市場環境下受到歡迎,但可能過不了多久,它就被取代了。如果你覺得你的創意是與眾不同的,而且是值得你去追求的,那麼你不需要虔誠地追隨潮流,但是你還是需要留意它們。
現在有許多平台可以讓你隨時了解在游戲開發領域的趨勢和新聞。這些平台包括了Gamasutra 和Board Game Geek。你還可以關注Edge magazine,一個關於游戲開發的電子雜志網站,或者是在Livecoding.tv上那些游戲開發者的直播和視頻。
嘗試類似的游戲並嚴謹地評估它們
現在,像Subway Surfers(地鐵跑酷)和Candy
Crush(糖果傳奇)這些游戲已經完全不是新概念了。它採取了大量很酷的開發工作,把這些通用的游戲概念轉變為有數百萬美元收入的游戲。這包括了可愛的聲音、視覺效果,養眼的界面以及質朴的人物。因此,如果你懂得用正確的方法去設計一個游戲,並且為了設計好它,你會去看其它相似的著名游戲,那麼即使只是最簡單的游戲,如俄羅斯方塊,它也一樣可以很出名。
嘗試用批判性的思維去評估這些游戲,是什麼令它們如此出色,並且嘗試把它們的成功之處運用到你的游戲中。它會令事情變得有趣。
嘗試,測試,寫碼
當你能夠在開發游戲時同時處理多個工作任務的時候,你將開始想知道成為一名專業游戲開發者是怎樣的。如果你有了一個特別的靈感,你應該立即執行它,並測試它。這部分的工作開始得越慢,你就越難在工作計劃中變得積極。
盡可能發揮創意
如果沒有原創性,游戲開發就沒有意義了。因此不要害怕嘗試你的瘋狂想法,並把它們融入到你的游戲中。你沒有必要遵循書本上的具體定律,甚至在游戲環境中,人類本身的認知並不重要,只要它對玩家來說是有趣的。
從不停止學習
在游戲開發中,如果你沒有一個永遠學習的態度,你不可能成為一個征服所有人的專家。多年來,我們已經看到了有很多游戲開發平台和開發語言出現。游戲開發者不可以避免自己的學習歷程可能會有變緩的風險,因此要多關注新聞,在你的游戲中多作嘗試和融入新的趨勢。它將令你的游戲有一個最新的前景。
把它變成一件日常的事情
游戲開發永遠不會突然取得成功,你需要每天勤奮地工作。不要放過每一個機會去玩你的游戲並為它工作,它將成為你的第二天性。如果游戲不有趣,那就注入熱情,用天馬行空的方法來讓它變得是有價值的。如果你不能自我激勵地為自己的游戲工作,你有可能在你一生中也無法獲得成功。
『貳』 用C語言編寫的小游戲代碼是什麼
「猜數字小游戲」,每個數字後按空格,最後按回車確認
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int a[4],b[4];
int count=0; //計算猜測次數
void csh( ); //初始化
void start( ); //開始游戲
int main( )
{ csh( );
start( );
}
void csh( ) //初始化
{ printf(" 猜 數 字 小 游 戲 ");
printf(「 猜四個數字,如數字與順序都正確記為A,數字正確位置不對記為B. 」);
}
void start( ) //開始游戲
{int m,n; //m是完全猜對的個數,n是順序不對的個數
while(1)
{srand((unsigned)time(NULL)); //初始化隨機數發生器srand( )
while(1) { for(int i=0;i<4;i++) a[i]=rand( )%10; //rand( )函數每次隨機產生一個0-9的數
if( (a[3]!=a[2]&&a[3]!=a[1]&&a[3]!=a[0])&&
(a[2]!=a[1]&&a[2]!=a[0])&&a[1]!=a[0] ) break; } //4個隨機數各自不相等
printf(" 請依次輸入4個一位整數: ");
while(1)
{for(int i=0;i<4;i++) scanf(「%d」,&b[i]);
printf(" 你輸入的是:%d %d %d %d ",b[0],b[1],b[2],b[3]);
m=0;n=0;
for(int i=0;i<4;i++)
{for(int j=0;j<4;j++)
{ if(b[i]==a[j]&&i==j)m=m+1; if(b[i]==a[j]&&i!=j)n=n+1; }
}
count=count+1;
printf(" %dA %dB 你試了%d次 ",m,n,count);
if(m==4)break;
if(count==8){ count=0; break; }
}
printf(" ");
if(m==4)printf(" 你猜對了(^-^)! 就是:%d %d %d %d ",a[0],a[1],a[2],a[3]);
else printf(" 你輸了(T-T)!哈哈!應該是:%d %d %d %d ",a[0],a[1],a[2],a[3]);
int z;
printf(" (要繼續嗎?1或0) ");
scanf(「%d」,&z);
if(z==0) break;
}
}
『叄』 怎麼樣用vc++6.0編寫小游戲
文件->新建->工程選項卡->win32 console application->輸入工程名和保存路徑->確定->完成->確定
然後再
文件->新建->文件選項卡->C++ source file->輸入文件名->確定
這樣就可以編譯了
『肆』 請問VC++怎麼做小游戲啊
建議學DirectX,有一本書叫《DirectX 9.0 3D游戲開發編程基礎》,清華大學出版社的,主要介紹如何使用DirectX 9.0開發互動式3D圖形程序,重點是游戲開發。我現在就在學,很不錯。
『伍』 VC++製作一個小游戲步驟
舉五子棋做個例子,第一步做界面,無非就是畫幾條線,寫上行號列號,找個黑棋白棋的點陣圖。第二步寫演算法,五子棋的演算法無非是某方有橫的或豎的或斜的的五個子連在一起就贏。
我手頭有個下象棋的小程序,寫了兩天,演算法做的差不多了,界面也有一點,但演算法和界面還沒聯系。要有興趣和我聯系,我把代碼給你。
『陸』 求個用VC++C語言編寫的小游戲
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
int random();
int mopai(int shan);
int yourchusha(int shan);
int i,xingcan=0,temp,choice;
int yoursha=0,yourshan=0;
int itssha=0,itsshan=0;
int yourhp=4,itshp=4;
printf("三國殺簡易版:\n");
printf("開始游戲:\n");
srand( (unsigned)time( NULL ) );
for(i=1;i<=4;i++)
{
random();//random() 方法可返回介於 0 ~ 1 之間的一個隨機數。
if(!random())
yourshan+=1;
else yoursha+=1;
}
for(i=1;i<=4;i++)
{
random();
if(!random())
itsshan+=1;
else itssha+=1;
}
printf("你的手牌:殺%d張,閃%d張\t",yoursha,yourshan);
printf("計算機的手牌:%d張\n",itssha+itsshan);
printf("你的體力:%d\t",yourhp);
printf("計算機的體力:%d\n",itshp);
while(yourhp&&itshp)
{
printf("\n你的行動開始:\n");
printf("\n摸牌階段:\n");
temp=mopai(xingcan);
yourshan+=temp;
yoursha+=(2-temp);
xingcan=0;
printf("你的手牌:殺%d張,閃%d張\n",yoursha,yourshan);
printf("\n按任意鍵繼續\n");
getch();
system("cls");
printf("你的手牌:殺%d張,閃%d張\t",yoursha,yourshan);
printf("計算機的手牌:%d張\n",itssha+itsshan);
printf("你的體力:%d\t",yourhp);
printf("計算機的體力:%d\n",itshp);
printf("\n出牌階段:\n");
printf("請選擇:\n");
printf("1.出殺 2.棄牌\n");
while(1)
{
scanf("%d",&choice);
if(choice!=1&&choice!=2)
printf("輸入錯誤,請重新輸入\n");
else break;
}
if(choice==1)
{
if(yoursha)
{
yoursha-=1;
if(yourchusha(itsshan))
itsshan-=1;
else
{
itshp-=1;
}
}
else printf("你沒有殺,請棄牌\n");
}
if(!itshp)
break;
printf("\n按任意鍵繼續\n");
getch();
system("cls");
printf("你的手牌:殺%d張,閃%d張\t",yoursha,yourshan);
printf("計算機的手牌:%d張\n",itssha+itsshan);
printf("你的體力:%d\t",yourhp);
printf("計算機的體力:%d\n",itshp);
printf("棄牌階段:\n");
while(yoursha+yourshan-yourhp>0)
{
printf("你需要棄掉%d張卡牌,請逐張棄牌:\n",yoursha+yourshan-yourhp);
printf("1.棄一張殺 2.棄一張閃\n");
while(1)
{
scanf("%d",&choice);
if(choice!=1&&choice!=2)
printf("輸入錯誤,請重新輸入\n");
else break;
}
switch(choice)
{
case 1:
{
if(yoursha)
yoursha-=1;
else printf("你沒有殺,請重新選擇\n");
break;
}
case 2:
{
if(yourshan)
yourshan-=1;
else printf("你沒有閃,請重新選擇\n");
break;
}
}
}
printf("你的行動結束。\n");
printf("\n按任意鍵繼續\n");
getch();
system("cls");
printf("你的手牌:殺%d張,閃%d張\t",yoursha,yourshan);
printf("計算機的手牌:%d張\n",itssha+itsshan);
printf("你的體力:%d\t",yourhp);
printf("計算機的體力:%d\n",itshp);
printf("計算機的行動開始:\n");
printf("摸牌階段:\n");
temp=mopai(xingcan);
itsshan+=temp;
itssha+=(2-temp);
xingcan=0;
printf("計算機手牌數:%d張\n",itssha+itsshan);
printf("\n按任意鍵繼續\n");
getch();
system("cls");
printf("你的手牌:殺%d張,閃%d張\t",yoursha,yourshan);
printf("計算機的手牌:%d張\n",itssha+itsshan);
printf("你的體力:%d\t",yourhp);
printf("計算機的體力:%d\n",itshp);
printf("出牌階段:\n");
if(itssha)
{
itssha-=1;
printf("殺\n");
printf("計算機對你出了一張殺,請出一張閃\n");
printf("1.確定 2.取消\n");
while(1)
{
scanf("%d",&choice);
if(choice!=1&&choice!=2){
printf("輸入錯誤,請重新輸入\n");
system("cls");
printf("你的手牌:殺%d張,閃%d張\t",yoursha,yourshan);
printf("計算機的手牌:%d張\n",itssha+itsshan);
printf("你的體力:%d\t",yourhp);
printf("計算機的體力:%d\n",itshp);
}
else break;
}
switch(choice)
{
case 1:
{
if(yourshan)
{
yourshan-=1;
printf("閃\n");
break;
}
else printf("你沒有閃\n");
}
case 2:
{
yourhp-=1;
printf("計算機對你造成一點傷害\n");
}
}
}
if(!yourhp)
break;
printf("計算機手牌數:%d張\n",itssha+itsshan);
printf("棄牌階段:\n");
if(itssha+itsshan-itshp>0)
{
if(itshp>itsshan)
{
printf("計算機棄殺%d張\n",itssha+itsshan-itshp);
itssha-=(itssha+itsshan-itshp);
}
else
{
printf("計算機棄殺%d張,閃%d張\n",itssha,itsshan-itshp);
itssha=0;
itsshan=itshp;
}
}
printf("計算機的行動結束。\n");
printf("\n按任意鍵繼續\n");
getch();
system("cls");
printf("你的手牌:殺%d張,閃%d張\t",yoursha,yourshan);
printf("計算機手牌數:%d張\n",itssha+itsshan);
printf("你的體力:%d\t",yourhp);
printf("計算機的體力:%d\n",itshp);
}
if(!yourhp)
printf("很遺憾,計算機擊敗了你\n");
else printf("恭喜你,你擊敗了計算機\n");
printf("游戲結束,歡迎下次再來!\n");
printf("\n按任意鍵退出。");
getch();
return 0;
}
int random()
{
return rand()%3;
}
int mopai(int shan)
{
int i;
srand( (unsigned)time( NULL ) );
for(i=1;i<=2;i++)
{
random();
if(!random())
shan+=1;
}
return shan;
}
int yourchusha(int shan)
{
printf("殺 ");
if(shan)
{
printf("閃\n");
return 1;
}
else
{
printf("您對計算機造成一點傷害\n");
return 0;
}
}
『柒』 c語言小游戲代碼
「貪吃蛇」C代碼,在dev C++試驗通過(用4個方向鍵控制)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <Windows.h>
#define W 78 //游戲框的寬,x軸
#define H 26 //游戲框的高,y軸
int dir=3; //方向變數,初值3表示向「左」
int Flag=0; //吃了食物的標志(1是0否)
int score=0; //玩家得分
struct food{ int x; //食物的x坐標
int y; //食物的y坐標
}fod; //結構體fod有2個成員
struct snake{ int len; //蛇身長
int speed; //移動速度
int x[100]; //蛇身某節x坐標
int y[100]; //蛇身某節y坐標
}snk; //結構體snk有4個成員
void gtxy( int x,int y) //控制游標移動的函數
{ COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void gtxy( int x,int y); //以下聲明要用到的幾個自編函數
void csh( ); //初始化界面
void keymove( ); //按鍵操作移動蛇
void putFod( ); //投放食物
int Over( ); //游戲結束(1是0否)
void Color(int a); //設定顯示顏色的函數
int main( ) //主函數
{ csh( );
while(1)
{ Sleep(snk.speed);
keymove( );
putFod( );
if(Over( ))
{ system(「cls」);
gtxy(W/2+1,H/2); printf(「游戲結束!T__T」);
gtxy(W/2+1,H/2+2); printf(「玩家總分:%d分」,score);
getch( );
break;
}
}
return 0;
}
void csh( ) //初始化界面
{ int i;
gtxy(0,0);
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏游標的設置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
for(i=0;i<=W;i=i+2) //橫坐標要為偶數,因為這個要列印的字元佔2個位置
{Color(2); //設定列印顏色為綠色
gtxy(i,0); printf("■"); //列印上邊框
gtxy(i,H); printf("■"); //列印下邊框
}
for(i=1;i<H;i++)
{ gtxy(0,i); printf("■"); //列印左邊框
gtxy(W,i); printf("■"); //列印右邊框
}
while(1)
{ srand((unsigned)time(NULL)); //初始化隨機數發生器srand( )
fod.x=rand()%(W-4)+2; //隨機函數rand( )產生一個從0到比」(W-4)」小1的數再加2
fod.y=rand()%(H-2)+1; //隨機函數rand( )產生一個從0到比」(H-2)」小1的數再加1
if (fod.x%2==0) break; //fod.x是食物的橫坐標,要是2的倍數(為偶數)
}
Color(12); //設定列印顏色為淡紅
gtxy(fod.x,fod.y); printf("●"); //到食物坐標處列印初試食物
snk.len=3; //蛇身長初值為3節
snk.speed=350; //刷新蛇的時間,即移動速度初值為350毫秒
snk.x[0]=W/2+1; //蛇頭橫坐標要為偶數(因為W/2=39)
snk.y[0]=H/2; //蛇頭縱坐標
Color(9); //設定列印顏色為淡藍
gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭
for(i=1;i<snk.len;i++)
{ snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1];
gtxy(snk.x[i],snk.y[i]); printf("■"); //列印蛇身
}
Color(7, 0); //恢復默認的白字黑底
return;
}
void keymove( ) //按鍵操作移動蛇
{ int key;
if( kbhit( ) ) //如有按鍵輸入才執行下面操作
{ key=getch( );
if (key==224) //值為224表示按下了方向鍵,下面要再次獲取鍵值
{ key=getch( );
if(key==72&&dir!=2)dir=1; //72表示按下了向上方向鍵
if(key==80&&dir!=1)dir=2; //80為向下
if(key==75&&dir!=4)dir=3; //75為向左
if(key==77&&dir!=3)dir=4; //77為向右
}
if (key==32)
{ while(1) if((key=getch( ))==32) break; } //32為空格鍵,這兒用來暫停
}
if (Flag==0) //如沒吃食物,才執行下面操作擦掉蛇尾
{ gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); printf(" "); }
int i;
for (i = snk.len - 1; i > 0; i--) //從蛇尾起每節存儲前一節坐標值(蛇頭除外)
{ snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; }
switch (dir) //判斷蛇頭該往哪個方向移動,並獲取最新坐標值
{ case 1: snk.y[0]--; break; //dir=1要向上移動
case 2: snk.y[0]++; break; //dir=2要向下移動
case 3: snk.x[0]-=2; break; //dir=3要向左移動
case 4: snk.x[0]+=2; break; //dir=4要向右移動
}
Color(9);
gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭
if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物則執行以下操作
{ printf("7"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //7是響鈴
else Flag = 0; //沒吃到食物Flag的值為0
if(snk.speed<150) snk.speed= snk.speed+5; //作弊碼,不讓速度無限加快
}
void putFod( ) //投放食物
{ if (Flag == 1) //如吃到食物才執行以下操作,生成另一個食物
{ while (1)
{ int i,n= 1;
srand((unsigned)time(NULL)); //初始化隨機數發生器srand( )
fod.x = rand( ) % (W - 4) + 2; //產生在游戲框范圍內的一個x坐標值
fod.y = rand( ) % (H - 2) + 1; //產生在游戲框范圍內的一個y坐標值
for (i = 0; i < snk.len; i++) //隨機生成的食物不能在蛇的身體上
{ if (fod.x == snk.x[i] &&fod.y == snk.y[i]) { n= 0; break;} }
if (n && fod.x % 2 == 0) break; //n不為0且橫坐標為偶數,則食物坐標取值成功
}
Color(12); //設定字元為紅色
gtxy(fod.x, fod.y); printf("●"); //游標到取得的坐標處列印食物
}
return;
}
int Over( ) //判斷游戲是否結束的函數
{ int i;
Color(7);
gtxy(2,H+1); printf(「暫停鍵:space.」); //以下列印一些其它信息
gtxy(2,H+2); printf(「游戲得分:%d」,score);
if (snk.x[0] == 0 || snk.x[0] == W) return 1; //蛇頭觸碰左右邊界
if (snk.y[0] == 0 || snk.y[0] == H) return 1; //蛇頭觸碰上下邊界
for (i = 1; i < snk.len; i++)
{ if (snk.x[0] == snk.x[i] && snk.y[0] == snk.y[i]) return 1; } //蛇頭觸碰自身
return 0; //沒碰到邊界及自身時就返回0
}
void Color(int a) //設定顏色的函數
{ SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE ),a ); }
『捌』 如何用vc++編寫程序製作一個小游戲
很多年前, 一個爸爸和一個媽媽想休假,所以他們決定晚上去城鎮。他們叫來最信任一個人來照看孩子。當保姆來的時候,他們的連個孩子已經在床上睡著了。所以保姆只是看了看孩子是否睡的好,就坐下了。
深夜,保姆覺得無聊就想去樓下看電視。但是她看不了,因為樓下沒有電視(因為孩子的父母不希望他們的孩子看太多垃圾)。她就打電話給孩子的父母,問是否可以在他們的卧室看電視,當然孩子的父母同意了。
但保姆又想要最後一個請求。
她問是否可以用毯子或者衣服蓋住那小丑雕像,因為那使她感到很害怕。
電話沉默了一會。
(此時爸爸在和保姆通話)
他說:帶孩子離開房間……
我們將會叫警察……我們從來沒有什麼小丑雕像。
那小丑很可能是一個從監獄逃出來的殺人犯。
電話里沉默了一會兒。
(正在跟保姆通話的孩子的父親)說:帶上孩子們,離開房子……我們會通知警察……我們沒有一個小丑雕像……
『玖』 vc6.0小游戲編程過程
建議你去看下關於VC工具第一節課的視頻(VC工具如何使用)