c語言游戲編程,用C語言編寫的小游戲代碼是什么?
最基礎的貪吃蛇的代碼
#include<stdio.h>
#include<windows.h>//基本型態定義。支援型態定義函數。使用者界面函數圖形裝置界面函數。
#include<conio.h>
//用戶通過按鍵盤產生的對應操作(控制臺)
#include<stdlib.h>
#include<time.h>//日期和時間頭文件
#defineLEN30
#defineWID25
intSnake[LEN][WID]={0};
//數組的元素代表蛇的各個部位
charSna_Hea_Dir='a';//記錄蛇頭的移動方向
intSna_Hea_X,Sna_Hea_Y;//記錄蛇頭的位置
intSnake_Len=3;//記錄蛇的長度
clock_tNow_Time;//記錄當前時間,以便自動移動
intWait_Time;//記錄自動移動的時間間隔
intEat_Apple=1;//吃到蘋果表示為1
intLevel;
intAll_Score=-1;
intApple_Num=-1;
HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);
//獲取標準輸出的句柄<windows.h>
//句柄:標志應用程序中的不同對象和同類對象中的不同的實例方便操控,
voidgotoxy(intx,inty)//設置光標位置
{
COORDpos={x,y};
//定義一個字符在控制臺屏幕上的坐標POS
SetConsoleCursorPosition(hConsole,pos);
//定位光標位置的函數<windows.h>
}
voidHide_Cursor()//隱藏光標固定函數
{
CONSOLE_CURSOR_INFOcursor_info={1,0};
SetConsoleCursorInfo(hConsole,&cursor_info);
}
voidSetColor(intcolor)//設置顏色
{
SetConsoleTextAttribute(hConsole,color);
//是API設置字體顏色和背景色的函數格式:SetConsoleTextAttribute(句柄,顏色);
}
voidPrint_Snake()//打印蛇頭和蛇的脖子和蛇尾
{
intiy,ix,color;
for(iy=0;iy<WID;++iy)
for(ix=0;ix<LEN;++ix)
{
if(Snake[ix][iy]==1)//蛇頭
{
SetColor(0xf);//oxf代表分配的內存地址setcolor:34行自定義設置顏色的函數
gotoxy(ix*2,iy);
printf("※");
}
if(Snake[ix][iy]==2)//蛇的脖子
{
color=rand()%15+1;
//rand()函數是產生隨機數的一個隨機函數。C語言里還有srand()函數等。
//頭文件:stdlib.h
if(color==14)
color-=rand()%13+1;
//變色
SetColor(color);
gotoxy(ix*2,iy);
printf("■");
}
if(Snake[ix][iy]==Snake_Len)
{
gotoxy(ix*2,iy);
SetColor(0xe);
printf("≈");
}
}
}
voidClear_Snake()//擦除貪吃蛇
{
intiy,ix;
for(iy=0;iy<WID;++iy)
for(ix=0;ix<LEN;++ix)
{
gotoxy(ix*2,iy);
if(Snake[ix][iy]==Snake_Len)
printf("");
}
}
voidRand_Apple()//隨機產生蘋果
{
intix,iy;
do
{
ix=rand()%LEN;
iy=rand()%WID;
}while(Snake[ix][iy]);
Snake[ix][iy]=-1;
gotoxy(ix*2,iy);
printf("⊙");
Eat_Apple=0;
}
voidGame_Over()//蛇死掉了
{
gotoxy(30,10);
printf("GameOver");
Sleep(3000);
system("pause>nul");
exit(0);
}
voidMove_Snake()//讓蛇動起來
{
intix,iy;
for(ix=0;ix<LEN;++ix)//先標記蛇頭
for(iy=0;iy<WID;++iy)
if(Snake[ix][iy]==1)
{
switch(Sna_Hea_Dir)//根據新的蛇頭方向標志蛇頭
{
case'w':
if(iy==0)
Game_Over();
else
Sna_Hea_Y=iy-1;
Sna_Hea_X=ix;
break;
case's':
if(iy==(WID-1))
Game_Over();
else
Sna_Hea_Y=iy+1;
Sna_Hea_X=ix;
break;
case'a':
if(ix==0)
Game_Over();
else
Sna_Hea_X=ix-1;
Sna_Hea_Y=iy;
break;
case'd':
if(ix==(LEN-1))
Game_Over();
else
Sna_Hea_X=ix+1;
Sna_Hea_Y=iy;
break;
default:
break;
}
}
if(Snake[Sna_Hea_X][Sna_Hea_Y]!=1&&Snake[Sna_Hea_X][Sna_Hea_Y]!=0&&Snake[Sna_Hea_X][Sna_Hea_Y]!=-1)
Game_Over();
if(Snake[Sna_Hea_X][Sna_Hea_Y]<0)//吃到蘋果
{
++Snake_Len;
Eat_Apple=1;
}
for(ix=0;ix<LEN;++ix)//處理蛇尾
for(iy=0;iy<WID;++iy)
{
if(Snake[ix][iy]>0)
{
if(Snake[ix][iy]!=Snake_Len)
Snake[ix][iy]+=1;
else
Snake[ix][iy]=0;
}
}
Snake[Sna_Hea_X][Sna_Hea_Y]=1;//處理蛇頭
}
voidGet_Input()//控制蛇的移動方向
{
if(kbhit())
{
switch(getch())
{
case87:
Sna_Hea_Dir='w';
break;
case83:
Sna_Hea_Dir='s';
break;
case65:
Sna_Hea_Dir='a';
break;
case68:
Sna_Hea_Dir='d';
break;
default:
break;
}
}
if(clock()-Now_Time>=Wait_Time)//蛇到時間自動行走
{
Clear_Snake();
Move_Snake();
Print_Snake();
Now_Time=clock();
}
}
voidInit()//初始化
{
system("title貪吃毛毛蛇");
system("modecon:cols=80lines=25");
Hide_Cursor();
gotoxy(61,4);
printf("YouScore:");
gotoxy(61,6);
printf("YouLevel:");
gotoxy(61,8);
printf("TheLenght:");
gotoxy(61,10);
printf("TheSpeed:");
gotoxy(61,12);
printf("AppleNum:");
inti;
for(i=0;i<Snake_Len;++i)//生成蛇
Snake[10+i][15]=i+1;
intiy,ix;//打印蛇
for(iy=0;iy<WID;++iy)
for(ix=0;ix<LEN;++ix)
{
if(Snake[ix][iy])
{
SetColor(Snake[ix][iy]);
gotoxy(ix*2,iy);
printf("■");
}
}
}
voidPri_News()//打印信息
{
SetColor(0xe);
gotoxy(73,4);
All_Score+=Level;
printf("%3d",All_Score);
gotoxy(73,6);
printf("%3d",Level);
gotoxy(73,8);
printf("%3d",Snake_Len);
gotoxy(73,10);
printf("0.%3ds",Wait_Time/10);
gotoxy(73,12);
printf("%d",Apple_Num);
}
voidLev_Sys()//等級系統
{
if(((Apple_Num-1)/10)==Level)
{
++Level;
if(Wait_Time>50)
Wait_Time-=50;
else
if(Wait_Time>10)
Wait_Time-=10;
else
Wait_Time-=1;
}
}
intmain(void)
{
Init();
srand((unsigned)time(NULL));//設置隨機數的種子
Now_Time=clock();
intspeed1=1000,speed2,a;
printf("\n");
printf("請輸入你想要的速度\n");
scanf("%d",&speed2);
Level=1;
Wait_Time=speed1-speed2;
printf("請輸入你想要的蘋果數\n");
scanf("%d",&a);
while(a--)
Rand_Apple();
while(1)
{
if(Eat_Apple)
{
++Apple_Num;
Rand_Apple();
Lev_Sys();
Pri_News();
}
Get_Input();
Sleep(10);
}
return0;
}
C語言編寫要求?
代碼編寫規則應該在建立一個工程項目之前,應該貫穿整個項目的始終,以保證代碼的一致性。采用標準的代碼編寫慣例,可以大大簡化項目的維護負擔。采用一種好的風格,以達到以下目的:可移植性、連貫、整潔、易于維護、易于理解、簡潔。
制定標準的基本目的是加強代碼的可維護性。也就是說代碼必須易于閱讀、易于理解、易于測試、易于移植。保持代碼的簡單清晰,不要在語言中使用晦澀難懂的表達,直接表明你的思想。保持一致性,盡可能使用同樣的規則,避免使用復雜語句,一個語句若有太多的決策點將會使代碼難于理解,尤其是對于測試。一旦修改已存在的代碼,就要隨時更新相關文檔。
游戲編程是不是一般都是用C語言或C?
看了樓上很多人都說unity用c#,ue用c++,這樣其實是錯的,這兩個引擎都是用的c++編寫,然后增加了腳本支持,u3d用c#,ue用自己的腳本而已。但是兩個引擎你要上c++也沒問題。
現代軟件開發,包括游戲,都很少使用單一語言開發的,例如你看魔獸世界,好龐大的游戲,他用純c++開發的話,可能還要跳票10年,編譯語言開發業務的效率,真的沒辦法和腳本語言相比,只要你的游戲核心部分,語需要強大的計算效率部分都用c或者c++寫好,腳本調用就好了,無論是python還是lua,js,c#都可以用,普通業務效率基本沒區別。
總結一下就是,需要高效率運算的部分,就用c/c++,例如渲染。
游戲玩法部分,就用腳本語言就行了。
現在一般的游戲或者軟件都用什么語言編程?
這里有兩個問題,一個是C和C++的區別和聯系,而是如何進行應用軟件開發。
C++比C語言更復雜,也完全兼容C的語法,不僅提供了面向對象的特性,還加入了模版元編程,直接把復雜度提升了一個檔次。但也別有畏難情緒,C++的基本語法都很簡單,包括模版,主要是看熟練程度,有些東西也不用刻意去學,包括一些語法糖,實際項目中很少用到,所以那些說C++怎么怎么復雜,怎么怎么難學的,聽聽就好別當真,可以說只要掌握面向對象,了解基本的模版編程,熟練使用stl或boost(里面的東西不需要全掌握,只掌握重點的容器、算法,boost的asio就可以了),就可以開始工作了。
軟件開發這個話題太廣,如果你熟悉了C/C++,到了這個階段,就可以熟悉各種API了,如win32或posix等,比如可以看Windows程序設計或Linux程序設計等這類書籍。
就目前來看C\C++的路的確越來越窄,桌面開發可以選擇Qt,但是windows還是推薦使用.net,C++僅作為備選方案,隨著互聯網和云計算的盛行,C++在這方面基本沒什么用武之地,本來以為可以在物聯網上大展宏圖,結果半路殺出一個python,隨后連Ubuntu都將其作為官方開發語言,這也是一個悲傷的故事。
但對于嵌入式工程師,C/C++這個目前還無法替代,而且門檻極高,要熟悉Linux架構,會對內核進行裁剪,要為特定硬件編寫驅動,需要豐富的軟硬件知識積累。
游戲目前主流的編程語言是C#,各大主流的商業游戲引擎,如unity,cryengine等都使用C#,目前只有unreal4采用的C++,當然unreal4也可以采用藍圖。像前幾年盛行的cocos2dx也是采用C++,但目前基本已經淘汰了。
游戲編程對數學能力要求較高,首先需要掌握高等數學和線性代數等理論知識,然后看一些計算機圖形學的相關知識,伴隨著這些理論知識的學習掌握相關的圖形api,比如OpenGL或directx,如果是從事移動端,需要學習opengl es,而OpenGL es是在OpenGL上精簡而來的,拋離了OpenGL中的固定功能管線,采用可編程管線,即shader(shader是一種類c語言,語法很簡單,但需要一定的數學功底才能寫好),所以要重點學習OpenGL 3.0以上的版本。在這之后就可以開始學習游戲引擎了,有了上面的知識,游戲引擎就想對簡單了,就相當于使用ide。
如何用c語言編程?
#include "stdio.h" #define N 10 void main() { int i,j,sum=0,SUM=0; for(i=1;i<N+1;i++) { for(j=1;j<i+1;j++) { sum+=j; } SUM+=sum; sum=0