導航:首頁 > 源碼編譯 > sdl游戲源碼

sdl游戲源碼

發布時間:2022-04-28 04:57:06

㈠ 求一些小游戲GCC下的的c語言源碼

掃雷游戲(C語言版)
已經編譯運行確認:

包括
#包括
,包括
#定義LEFTPRESS 0xff01
定義左擊0xff10
定義LEFTDRAG 0xff19
定義MOUSEMOVE 0xff08
結構
{
數;/ *格紋是目前正處於什麼狀態,礦山,數字0或空白格* /
詮釋roundnum ;/ *統計格子圖案周圍光線* /
INT標志;/ *用滑鼠右鍵按下紅色的國旗標志,沒有紅色的標志,紅色標志* /
}礦,[10] [10];
詮釋gameAGAIN = 0 ;/ *是否一遍又一遍的變數* / />詮釋游戲= 0 ;/ *這是否是第一次玩這個游戲的標志* /
詮釋mineNUM ;/ *號的統計處理網格* /
字元randmineNUM [3] ;/ *顯示數字的字元串* /
詮釋Keystate,的
詮釋的MouseExist;
詮釋MouseButton
詮釋MouseX
詮釋像老鼠
無效初始化(無效);/ *圖形驅動程序* /
的無效MouseOn(空);/ *滑鼠游標* /
的無效MouseOff(無效);/ *隱藏滑鼠游標* /
the>無效MouseSetXY(INT,INT);/ *設置當前位置* /
詮釋LeftPress(空);/ *鍵按下* /
RightPress(無效);/ *按下滑鼠右鍵* /
的無效MouseGetXY(空);/ *得到當前位置* /
的無效控制(無效);/ *在游戲開始時,重新,關閉* /
無效GameBegain (無效);/ *開始的游戲畫面* /
:無效DrawSmile(無效);/ *繪制笑臉* /
無效DrawRedflag(INT,INT);/ *紅色標志* / />無效DrawEmpty(INT,INT,INT,INT);/ *兩個空格子* /
無效GAMEOVER(空);/ *結束游戲* /
無效GameWin(空) ;/ *顯示勝利* /
詮釋MineStatistics(INT,INT);/ *統計每個格子周圍的地雷數* /
詮釋ShowWhite(INT,INT);/ *的空白部分,雷區* /
無效的主要(無效)無效游戲(無效);/ *游戲過程* /
無效的關閉(無效);/ *圖形關閉* /

{
初始化();
控制();
關閉();
}
無效的init(無效)/ *圖形開始* /
/> {
詮釋GD = DETECT,克;
initgraph(&GD,兼總經理,「C:\ \ TC」);
}
無效關閉(無效) / *圖形關閉* /

closegraph();
}
的的無效MouseOn(無效)/ *滑鼠游標顯示* /
{ > _AX = 0X01;
geninterrupt(地址0x33);
}
的無效MouseOff(無效)/ *滑鼠游標隱藏* /
{
_AX = 0X02 ;
geninterrupt(地址0x33);
}
無效MouseSetXY(X,詮釋y)/ *設置當前位置* /
{
_CX = X;
_DX = Y;
_AX = 0x04的;
geninterrupt(地址0x33);
}
為int LeftPress(空)/ *滑鼠左鍵按下* / BR /> {
_AX = 0x03的;
geninterrupt(地址0x33);
返回(_BX 1);
}
RightPress(無效)/ *滑鼠右鍵按* /
{
_AX = 0X03;
geninterrupt(地址0x33);
回報(_BX 2);
}
無效的MouseGetXY(無效)/ *獲取當前位置* /
{
_AX = 0X03;
geninterrupt(地址0x33);
MouseX _CX;
像老鼠= _DX;
}
的無效控制(無效)/ *開始的比賽中,重新,關閉* /
{
gameFLAG = 1 ;/ *失敗後的游戲以確定是否重新啟動標志* /
(1)
{
失敗後的游戲(gameFLAG)/ *如果沒有確定重新啟動或退出比賽繼續,以確定* /
{
GameBegain(); / *游戲初始畫面* /
游戲();/ *具體游戲* /
(gameAGAIN == 1)/ *在游戲中重新開始* /
{
gameAGAIN = 0;
繼續;
}
}
MouseOn() ;
gameFLAG = 0;
(LeftPress())/ *判斷是否恢復* /
{
MouseGetXY();
(MouseX>的280 && MouseX 65 &&像老鼠<85)
{
gameFLAG = 1;
繼續;
}
}
( kbhit())/ *判斷是否按鈕,退出* /
突破;
}
MouseOff的();
}
:無效DrawSmile(無效)/ *繪制笑臉* /
{
setfillstyle(SOLID_FILL,黃色);
fillellipse(290,75,10,10);
使用SetColor(黃色);
setfillstyle(SOLID_FILL BLACK);/ *眼* /
fillellipse(285,75,2,2); fillellipse(295,75,2,2);
使用SetColor(BLACK); / *口* /
酒吧(287,80,293,81);
}
無效DrawRedflag(INT I,詮釋J)/ *紅色標志* /
{ BR />使用SetColor(7);
setfillstyle(SOLID_FILL,RED);
酒吧(198 + J * 20,95 * 20,198 + J * 20 +5,95 + I * 20 +5 );
使用SetColor(BLACK);
行(198 + J * 20,95 * 20,198 + J + I * 20,95 * 20 +10);
}
>無效DrawEmpty(INT I,J,int模式,詮釋彩色)/ *兩種空格子顯示* /
{
使用SetColor(彩色);
setfillstyle(SOLID_FILL,顏色)
(模式== 0)/ *點擊大格* /
酒吧(200 + J * 20-8,100 + I * 20-8,200 + J * 20 8100 + * 20 + 8);
其他
(模式== 1)/ *點擊後顯示空白的小格* /
酒吧(200 + J * 20-7,100 + I * 20 - 7200 + J * 20 7100 + I * 20 +7);
}
的無效GameBegain(無效)/ *開始的游戲畫面* /
{
我, J;的
cleardevice();
(gamePLAY! = 1),
{
MouseSetXY(290,70); / *滑鼠的起始位置作為其初始坐標* / BR /> MouseX = 290;
像老鼠= 70;
}
游戲= 1 ;/ *下再次按啟動鍵,如果滑鼠不重新初始化* /
mineNUM = 0;的
setfillstyle(SOLID_FILL,7);
條(190,60,390,290);
為(i = 0; <10; i + +)/ *繪制網格* /
為(J = 0,J <10; + +)
DrawEmpty(I,J,0,8);
使用SetColor(7);
DrawSmile( );/ *臉部彩繪* /
隨機(); __ page_break__
(i = 0; <10; + +)/ * 100點陣隨機分配礦山* /
( J = 0,J <10; + +)
{
礦山,[I] [J] NUM =隨機();/ *如果隨機數的結果為1的晶格地雷* /
(礦,[I] [J]。數== 1)
mineNUM + + ;/ *現有的雷數加1 * /
其他
礦[I] [J]。數= 2;
礦,[I] [J]。標志= 0 ;/ *沒有紅色的標志* /
}在
的sprintf(randmineNUM,「%D」,mineNUM); / *這個時候一共有多少雷* / >通過setColor(1),
settextstyle(0,0,2);
outtextxy(210,70,randmineNUM);
mineNUM 100-mineNUM的;/ *變數一個空白網格數量* /
MouseOn();
}
無效GAMEOVER(無效)/ *結束的游戲畫面* /
{
INT I,J; <BR /通過setColor(0);
(i = 0; <10; i + +)
為(J = 0; J <10; + +)
(礦[我] [J]。數== 1)/ *所有地雷* /
{
DrawEmpty(I,J,0,RED);
setfillstyle(SOLID_FILL,BLACK); BR /> fillellipse(200 + J * 20100 + I * 20,7,7);
}
}
的無效GameWin(無效)/ *勝利* /
{ BR />使用SetColor(11);
settextstyle(0,0,2);
outtextxy(230,30,「你贏了!」);}

詮釋MineStatistics(我,J)/ *統計每個網格周圍雷* /
{
詮釋nNUM = 0;
(我== 0 &&?== 0)/ *上格左上角的統計* /
{
(礦,[0] [1]數== 1)
nNUM + +;
(礦,[1 ] [0]。數== 1)
nNUM + +;
(礦[1] [1]。數== 1)
nNUM + +;
}
其他
(我== 0 &&?== 9)/ *右上角的點陣統計* /
{
(礦山[0] [8]。數== 1)
nNUM + +;
如果(我的[1] [9]。數== 1)
nNUM + +;
(礦[1] [8],民== 1)
nNUM + +;
}
其他
(== 9 &&?== 0)/ *較低的左上角格統計* /
{
(礦,[8] [0]。數== 1)
nNUM + +;
(礦山[9] [1]。民== 1)
nNUM + +;
(礦用[8] [1]。數== 1)

nNUM + +;
}
其他
(== 9 &&?== 9)/ *右下角格子的統計* /
{
(礦[9] [8]。數== 1)
nNUM + +;
(礦用[8] [9]。數== 1)
nNUM + +;
(礦用[8] [8] NUM == 1)
nNUM + +;
}
否則,如果(十== 0)/ *電網統計數據的第一列的左側的* /
{
(礦[I] [J +1],民== 1)
nNUM + +;
(礦[i +1] [J]。數== 1)
nNUM + +;
(我的[I-1] [J]。數== 1)
nNUM + +;
(我的[I-1] J +1]。數== 1)
nNUM + +;
(礦[i +1] [j +1]中,民== 1)
nNUM + +; BR />}
否則,如果(J == 9)/ *第一列右側的晶格統計* /
{
(礦,[I] [J-1]數== 1)
nNUM + +;
(礦[i +1]的[J]。數== 1)
nNUM + +;
(礦[ I-1] [J]。數== 1)
nNUM + +;
(我的[I-1] [j-1的??數== 1)
nNUM + +;
(礦[i +1] [J-1]數== 1)
nNUM + +;
}
否則,如果(我== 0)/ *第一線格統計* /
{
如果(我的[I +1] [J]。數== 1)
nNUM + +;
(礦[ [J-1]。數== 1)
nNUM + +;
(礦[I] [j +1]中,民== 1)
nNUM + +; BR />(礦[i +1]的[J-1]。數== 1)
nNUM + +;
(礦[i +1] [j +1]中,民= 1)
nNUM + +;
}
否則,如果(我== 9)/ *網格統計的最後一行* /
{
(礦山,[I-1] [j]的數== 1)
nNUM + +;
(我的[I] [j-1]。數== 1)
nNUM + +;
(我的[I] [j +1]中,民== 1)
nNUM + +;
(礦[1] [j-1]。民== 1)
nNUM + +;
(礦I-1] [j +1]中,民== 1)

nNUM + +;
>}
其他/ *普通格子的統計* /
{
(礦山,[I-1] [j]的數== 1)
nNUM + +; BR />如果(我的[I-1] [j +1]中,民== 1)
nNUM + +;
(我的[I] [J + 1],民== 1 )
nNUM + +;
(礦[i +1] [J +1],民== 1)
nNUM + +;
(礦+ [1] [J]。數== 1)
nNUM + +;
(礦[i +1] [j-1]。數== 1)
nNUM + +;
如果(我的[I] [j-1]。數== 1)
nNUM + +;
(我的[I-1] [j-1]。數== 1)
nNUM + +;
} __ page_break__
的回報(nNUM);/ *格柵前後共多少雷統計結果返回* /
}
BR />詮釋ShowWhite(I INT J)/ *顯示雷區的空白部分* /
{
(礦,[I] [j]的標志== 1 | |礦,[I] [ ?數== 0)/ *如果有一個紅色的標志,或處理的細胞有網格的任何判斷* /
回報;
mineNUM - ;/ *顯示網格的數字或空格多一個網格,當所有格子的待遇,表示勝利* /
(礦山,[I] [J]。roundnum礦,[I] [J] == 0 && NUM!= 1)/ *顯示空間* /
{
DrawEmpty(I,J,1,7);
礦[I] [J]。 NUM = 0;
}
其他
(礦,[I] [J]。roundnum!= 0)/ *輸出雷數* /
{
DrawEmpty(I,J,0,8);的sprintf(
randmineNUM頁,「%d」,我的[I] [J]。roundnum);
使用SetColor(RED)
outtextxy(195 + J * 20,95 * 20,randmineNUM);
礦山,[I] [J] NUM = 0 ;/ *輸出雷的數格子圖案0已經使用該網格* / BR />回報;

}
/ * 8個方向遞歸所有的空白格* /
(i! = 0 &&礦,[I-1] [J] NUM!= 1),
ShowWhite(I-1,J);
(i! = 0 && J!= 9 &&礦[1] [j +1]中。NUM!= 1 )
ShowWhite(I-1,J +1);
(j! = 9 &&礦[I] [j +1]中。NUM!= 1),
ShowWhite(I, j +1)的;
(j! = 9 &&我!= 9 &&礦[i +1] [J + 1]。NUM!= 1),
ShowWhite(I +1,J + 1);
(i! = 9 &&礦[i +1]的[J]。NUM!= 1),
ShowWhite(I +1,J);
(i! = 9 && J!= 0 &&礦第[i +1] [j-1的??]。數!= 1)
ShowWhite第(i +1,J-1);
(j! = 0 &&礦[I] [J-1]。NUM!= 1),
ShowWhite(I,J-1);
(i! = 0 &&?= 0 &&礦[I-1 [J-1]。NUM!= 1),
ShowWhite(I-1,J-1);
}
無效(無效)/在游戲過程中游戲* / {
INT I,J,數量;/ *用來接收統計功能的Num返回一個格子周圍的地雷(i = 0 * /
我10,我+ +) BR />(J = 0; J <10; + +)
礦[I] [J]。 roundnum MineStatistics(I,J);/ *統計每個格子周圍的地雷數目* /
而(!kbhit())
{
(LeftPress())/ *滑鼠左鍵按鍵盤* /
{
MouseGetXY();
當(MouseX> 280 && MouseX。 65 &&像老鼠<85)/ *重* /
{
MouseOff的();
gameAGAIN = 1;
突破;

}
(MouseX> 190 && MouseX 90 && &&像老鼠像老鼠<290)/ *當前滑鼠的位置在網格範圍* /
{
J =(MouseX-190)/ 20 ;/ * x坐標* /
I(像老鼠-90)/ 20 ;/ * y坐標* /
(礦,[I] [j]的標志== 1)/ *如果剩下的晶格紅旗無效* / BR />繼續;
(我的[I] [J] NUM!= 0)/ *如果電網不處理* /
{
如果(礦[I] [J 。數== 1)/ *滑鼠按下的格子圖案是礦山* /

{
MouseOff的();
GAMEOVER();/ *游戲失敗* / BR />突破;
}
其他/ *滑鼠按下的格子不是我* /
{
MouseOff的();
編號= MineStatistics(I,J );
(編號== 0)/ *沒有礦山周圍顯示空白格* /
ShowWhite(I,J)遞歸演算法;
其他/ *按周圍的晶格礦山* /
{
sprintf的(randmineNUM,「%」,數量);/ *輸出電流電網周圍雷數* /
使用SetColor(RED);
outtextxy( 195 + J * 20,95 +我* 20,randmineNUM);
mineNUM - ;
}
MouseOn();
礦[I] [j]的數量= 0; / *周圍光線變為0的數字點格,網格已使用* /
(mineNUM <1)/ *勝利,* /
{
GameWin();
>;
}
}
}
}
}
(RightPress())/ *右鍵按鍵盤* /
{
MouseGetXY();
(MouseX> 190 && MouseX <390 &&像老鼠在90 &&像老鼠<290)/ *當前滑鼠的位置在格內* /
{ BR /> =的(MouseX-190)/ 20 ;/ * x坐標* /
(像老鼠-90)/ 20 ;/ * y坐標* /
MouseOff(); ...... />如果(我的[I] [J]。標志== 0 &&礦[I] [J]。NUM!= 0)/ *一直沒有紅旗,顯示一個紅色的標志* /
{ BR /> DrawRedflag(I,J);
礦[I] [J]。標志= 1;
}
其他
(礦[I] [J]。標志== 1)/ *紅旗和紅旗消失* / /> {
DrawEmpty(I,J,0,8);
礦[I] [J]標志= 0;
}
}
MouseOn()
睡眠(1);
}
}
}

㈡ 跪求 c語言 sdl 編寫的超級瑪麗 第一次編寫 主要是想看看思路 因為從來沒用過sdl

偶然路過一下。。。
這個游戲是用SDL寫的,不過貌似是C++。。。名叫secret maryo chronicles
去sourceforge.net一搜就找到了。。。開源的。。。
官網是:http://www.secretmaryo.org/

㈢ 有沒有大佬會c語言sdl編程編個游戲

最基礎的貪吃蛇的代碼#include#include//基本型態定義。支援型態定義函數。使用者界面函數圖形裝置界面函數。#include//用戶通過按鍵盤產生的對應操作(控制台)#include#include//日期和時間頭文件#defineLEN30#defineWID25intSnake[LEN][WID]={0};//數組的元素代表蛇的各個部位charSna_Hea_Dir='a';//記錄蛇頭的移動方向intSna_Hea_X,Sna_Hea_Y;//記錄蛇頭的位置intSnake_Len=3;//記錄蛇的長度clock_tNow_Time;//記錄當前時間,以便自動移動intWait_Time;//記錄自動移動的時間間隔intEat_Apple=1;//吃到蘋果表示為1intLevel;intAll_Score=-1;intApple_Num=-1;HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);//獲取標准輸出的句柄//句柄:標志應用程序中的不同對象和同類對象中的不同的實例方便操控,voidgotoxy(intx,inty)//設置游標位置{COORDpos={x,y};//定義一個字元在控制台屏幕上的坐標POSSetConsoleCursorPosition(hConsole,pos);//定位游標位置的函數}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;iynul");exit(0);}voidMove_Snake()//讓蛇動起來{intix,iy;for(ix=0;ix0){if(Snake[ix][iy]!=Snake_Len)Snake[ix][iy]+=1;elseSnake[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;i50)Wait_Time-=50;elseif(Wait_Time>10)Wait_Time-=10;elseWait_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;}

㈣ 如何成功運行SDL官方提供的android平台的Demo

您好,很高興能幫助您,
第一步:准備SDL源代碼包;
1. 去http://www.libsdl.org/官網下載最新版SDL2-2.0.3.tar.gz;
2. 解壓後,可以在根目錄下找到android-project目錄和README-android.txt,前者是一個一個Android工程模板,後者是關於如何使用該工程的文檔說明。
3. 調整目錄,使其成為一個可編譯的工程:
(1) 將android-project目錄剪切到與SDL2-2.0.3同級的目錄;
(2) 然後將SDL2-2.0.3目錄拷貝到android-project\jni目錄下,並重命名為SDL;
第二步:為SDL增加main函數
(1) mainhttp://wiki.libsdl.org/Tutorials#Android.c文件可以從http://www.dinomage.com/wp-content/uploads/2013/01/main.c下載;
(2) 下載之後將其放入android-project\jni\src目錄;
(3) 將main.c加入android-project\jni\src\Android.mk: 在Android.mk中默認有個YourSourceHere.c,將其替換為main.c即可;
第三步:編譯libSDL2.so和libmain.so
註:請確認NDK的bin目錄已經配置到環境變數PATH中去;
打開cmd命令窗口,進入到android-project目錄,然後執行"ndk-build"命令進行編譯。編譯成功後會在android-project根目錄下生成libs目錄,下面有各個平台的需要的這兩個so文件。
第四步:修改build target配置文件
默認的工程是使用的=android-12,必須使這個target與你系統配置的一致,否則編譯會失敗. 具體的配置位於android-project/project.properties和android-project/default.properties中。由於adt-bundle-windows-x86_64-20130729.zip包對應的是android-18,因此需要將這兩個文件中的配置全部改為android-18.
第五步:導入Eclipse運行
依次選擇File->New->Android->Android Project from Existing Code,然後選擇android-project目錄將工程文件導入到Eclipse中。
然後選擇按照正常的Android工程運行即可。這個時候程序閃一下什麼都沒有,因為沒有添加資源。可下載一個bmp圖片放到android-project/assets中,這個目錄是由eclipse自動生成的。然後運行就可以看到通過SDL渲染出來的圖片了。這 里提供一個官方文檔中提到的bmp地址:http://www.dinomage.com/wp-content/uploads/2013/01/image.bmp 。整個工程的源代碼可以到我的github上去下載,地址:https://github.com/dennishucd/SDLActivity
你的採納是我前進的動力,還有不懂的地方,請你繼續「追問」!
如你還有別的問題,可另外向我求助;答題不易,互相理解,互相幫助!

㈤ sdl是什麼是什麼

SDL是一個多義詞,所指的意思分別是:

1、SDL指的是SDL游戲庫:

SDL是一套開放源代碼的跨平台多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是相似的代碼就可以開發出跨多個平台的應用軟體。

2、SDL指的是軟體安全開發周期:

SDL即Security Development Lifecycle,是微軟提出的從安全形度指導軟體開發過程的管理模式。SDL不是一個空想的理論模型。

3、SDL指的是規格描述語言:

SDL語言是規格與描述語言。它以一種框圖和流程圖的形式,描述了用戶要求、交換機性能指標和設計結果。適用於系統設計和程序設計初期,概括說明整個系統的功能要求和技術規范。

(5)sdl游戲源碼擴展閱讀:

一個SDL系統就是用SDL規格所描述的一個具體物理存在,也就是目前從SDL語言的角度所關注的一切,對於目前不用SDL語言描述的,都作為SDL的環境看待。

也就是說,一個具體的物理系統如果只用SDL描述了其中的一部分,那麼這部分就是一個SDL系統,而該物理系統的其他部分對該SDL系統來講,就都是它的環境。

SDL系統通過信道與環境連接。從理論上講,SDL系統只需要一條雙向信道與環境連接,但實際上,為了描述方便,經常為環境的每個邏輯介面提供一條信道。

㈥ 如何將SDL源碼編譯成為動態庫

應該用makefile

㈦ sdl是干什麼的 能不能刪

SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平台多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是相似的代碼就可以開發出跨多個平台(Linux、Windows、Mac OS X等)的應用軟體。目前SDL多用於開發游戲、模擬器、媒體播放器等多媒體應用領域。如果你沒有用, 可以刪除。

㈧ 求c語言SDL的一些小游戲的源代碼,隨便什麼游戲都可以

最基礎的貪吃蛇的代碼

#include<stdio.h>
#include<windows.h>//基本型態定義。支援型態定義函數。使用者界面函數 圖形裝置界面函數。
#include<conio.h> //用戶通過按鍵盤產生的對應操作 (控制台)
#include<stdlib.h>
#include<time.h> //日期和時間頭文件
#define LEN 30
#define WID 25
int Snake[LEN][WID] = {0}; //數組的元素代表蛇的各個部位
char Sna_Hea_Dir = 'a';//記錄蛇頭的移動方向
int Sna_Hea_X, Sna_Hea_Y;//記錄蛇頭的位置
int Snake_Len = 3;//記錄蛇的長度
clock_t Now_Time;//記錄當前時間,以便自動移動
int Wait_Time ;//記錄自動移動的時間間隔
int Eat_Apple = 1;//吃到蘋果表示為1
int Level ;
int All_Score = -1;
int Apple_Num = -1;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //獲取標准輸出的句柄 <windows.h>
//句柄 :標志應用程序中的不同對象和同類對象中的不同的實例 方便操控,
void gotoxy(int x, int y)//設置游標位置
{
COORD pos = {x,y}; //定義一個字元在控制台屏幕上的坐標POS

SetConsoleCursorPosition(hConsole, pos); //定位游標位置的函數<windows.h>

}

void Hide_Cursor()//隱藏游標 固定函數
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(hConsole, &cursor_info);
}

void SetColor(int color)//設置顏色
{
SetConsoleTextAttribute(hConsole, color);
//是API設置字體顏色和背景色的函數 格式:SetConsoleTextAttribute(句柄,顏色);
}

void Print_Snake()//列印蛇頭和蛇的脖子和蛇尾
{
int iy, 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("≈");
}
}
}

void Clear_Snake()//擦除貪吃蛇
{
int iy, ix;
for(iy = 0; iy < WID; ++iy)
for(ix = 0; ix < LEN; ++ix)
{
gotoxy(ix*2, iy);
if(Snake[ix][iy] == Snake_Len)
printf(" ");
}
}

void Rand_Apple()//隨機產生蘋果
{
int ix, iy;

do
{
ix = rand() % LEN;
iy = rand() % WID;
}while(Snake[ix][iy]);

Snake[ix][iy] = -1;
gotoxy(ix*2, iy);
printf("⊙");
Eat_Apple = 0;
}

void Game_Over()//蛇死掉了
{
gotoxy(30, 10);
printf("Game Over");
Sleep(3000);
system("pause > nul");
exit(0);
}

void Move_Snake()//讓蛇動起來
{
int ix, 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;//處理蛇頭
}

void Get_Input()//控制蛇的移動方向
{
if(kbhit())
{
switch(getch())
{
case 87:

Sna_Hea_Dir = 'w';
break;
case 83:

Sna_Hea_Dir = 's';
break;
case 65:

Sna_Hea_Dir = 'a';
break;
case 68:

Sna_Hea_Dir = 'd';
break;
default:
break;
}
}

if(clock() - Now_Time >= Wait_Time)//蛇到時間自動行走
{
Clear_Snake();
Move_Snake();
Print_Snake();
Now_Time = clock();
}
}

void Init()//初始化
{
system("title 貪吃毛毛蛇");
system("mode con: cols=80 lines=25");
Hide_Cursor();

gotoxy(61, 4);
printf("You Score:");
gotoxy(61, 6);
printf("You Level:");
gotoxy(61, 8);
printf("The Lenght:");
gotoxy(61, 10);
printf("The Speed:");
gotoxy(61, 12);
printf("Apple Num:");

int i;
for(i = 0; i < Snake_Len; ++i)//生成蛇
Snake[10+i][15] = i+1;

int iy, 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("■");
}
}
}

void Pri_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);
}

void Lev_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;
}
}

int main(void)
{
Init();
srand((unsigned)time(NULL));//設置隨機數的種子
Now_Time = clock();
int speed1=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);
}
return 0;
}

㈨ 求SDL2打地鼠游戲的源代碼 急求,求好心人

恰巧我找到一個,沒法發鏈接,你在圖片上的網站搜「打地鼠游戲機,自己動手(附電路圖,源代碼,元件清單,視頻)」應該就可以搜到了,內容很詳細,希望可以幫到你~~

㈩ 求一個用sdl2.0 寫的c++小游戲 作業急用

比如 "貪吃蛇" 」俄羅斯方塊「 」飛行器「
這類控制台的游戲,雖然無趣,但是如果你想做一些看起來很炫很艷麗的2,3類游戲,相信我,你控制台這關,最好是認真做完。
這類游戲,你可以去圖書館借一本 」C語言課程設計」
這本書真的認認真真學完,敲出每一行代碼,你的面向過程編程能力,基本可以放心了。
有什麼代碼細節搞不定,上 CSDN, 博客園,overflow 去問,去發帖問。

閱讀全文

與sdl游戲源碼相關的資料

熱點內容
安卓平板android如何降級 瀏覽:124
蘋果怎麼下載整理文字軟體app 瀏覽:130
怎麼刪除一個app下載任務 瀏覽:713
python執行bat命令 瀏覽:471
什麼吉他調音器app最好 瀏覽:33
php程序員招聘試題 瀏覽:14
程序員升職記第九關最優解 瀏覽:317
三星安卓11怎麼訪問data文件夾 瀏覽:817
華三伺服器怎麼設置開機自啟 瀏覽:711
釘郵登錄伺服器地址 瀏覽:644
起源編譯器適配第二款應用 瀏覽:433
cad弄斷線條命令 瀏覽:463
怎麼恢復手機app的安裝包 瀏覽:300
idea重啟項目不編譯 瀏覽:495
程序員那麼可愛演員表陸漓媽媽 瀏覽:127
linuxgadget驅動 瀏覽:594
華三調用acl的命令 瀏覽:9
資金流pdf 瀏覽:931
金融結演算法補充條款 瀏覽:291
什麼叫伺服器怎麼連接 瀏覽:521