c語言代碼怎樣製作成一個遊戲?
c語言代碼怎樣轉換成一個遊戲?
一定要用c語言的話,網上搜一個叫SDL的引擎以及一個叫lazyfoo的人寫的教程。
會比較底層,但有助於系統的了解遊戲引擎知識。
題主想必是個比我還新的新手
正如樓上幾位所說寫遊戲當然是用遊戲引擎的好,但是自己親手寫幾個(即使是十分簡單的貪吃蛇)那也是很體現基礎的。
- 控制台遊戲
控制台遊戲的話那就只能用字元建立了雖然不好看但也是可以接受的,重點在於邏輯實現,底層邏輯有了,做好看那也就是個包裝的事了
鏈接 大一寒假寫的控制台貪吃蛇
&-->最近的迷宮
&-->- 圖形2D遊戲
遊戲引擎國內c++ 有easy2d還是很不錯的,還在更新中
但是自己弄的話推薦 easyx 和sdl2這兩個圖形庫,easyx比較適合新手入門快
easyx製作的貪吃蛇
&-->sdl功能強大但需要認真學習 教程樓上有提到 國外的lazyfoo的教程 不過是英文的
所以推薦樓主先學習easyx的使用
上面代碼略丑見諒
謝邀!我來哆嗦一個打灰機的小遊戲吧!
這是一個類似於飛機大戰的遊戲,不過目前代碼量比較小,所以看起來非常簡陋遊戲界面如下
更新日誌,本人將原來的原來的代碼有進一步的優化了一下,之前是只有一個非常小的戰機現在更新後可以產生一個非常大的戰機(看起來也更有氣勢了~~)和敵人的戰機,不過死亡的判定條件和邊境的判斷條件還沒有做好,等下次再繼續加油。2017.3.12更新
就是這樣一個簡陋的遊戲(實在慚愧,本人目前能力有限)
如下圖:
&-->#include&
#include&
#include&
#include&
#include&
#define MAX 100
long long int speed = 0;//控制敵機的速度
int position_x, position_y;//飛機的所在位置
int high, width;//地圖的大小
int bullet_x, bullet_y;//子彈的位置
int enemy_x, enemy_y;//敵人的位置
int map[MAX][MAX];
/*0表示空白,1表示戰機*的區域,2表示敵人戰機的位置。
3表示上下圍牆,4表示左右圍牆,5表示子彈的位置*/
int score;
void starup()//初始化所有的信息
{
high = 20;
width = 30;
position_x = high / 2;
position_y = width / 2;
bullet_x = 0;
bullet_y = position_y;
enemy_x = 2;
enemy_y = position_y - 1;
score = 0;
}
void startMap()
{
int i, j;
for (i = 1; i &<= high - 1; i++)
{
map[i][1] = 4;
for (j = 2; j &<= width - 1; j++)
map[i][j] = 0;
map[i][width] = 4;
}
//下方圍牆的初始化
i = high;
for (j = 1; j &<= width; j++)
map[i][j] = 3;
map[bullet_x][bullet_y] = 5;
/*這裡是戰機大小的初始化開始*/
map[position_x - 1][position_y] = 1;
i = position_x;
for (j = position_y - 2; j &<= position_y + 2; j++)
map[i][j] = 1;
map[position_x + 1][position_y - 1] = 1;
map[position_x + 1][position_y + 1] = 1;
/*** 初始化結束 **/
/* 敵人戰機的初始化 */
map[enemy_x][enemy_y] = 2;
map[enemy_x - 1][enemy_y - 1] = 2;
map[enemy_x - 1][enemy_y + 1] = 2;
/* 敵人戰機初始化結束*/
}
void HideCursor()//隱藏游標
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), cursor_info);
}
void gotoxy(int x, int y)//清理一部分屏幕
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void updateWithoutInput()//於輸入無關的跟新
{
if (bullet_x &> 0)
bullet_x--;
if ((bullet_x == enemy_x) (bullet_y == enemy_y))//當敵人的飛機被擊中時
{
score++;
enemy_x = 0;
enemy_y = rand() % width;
bullet_x = 0;
}
if (enemy_x &> high)//當飛機超出區域
{
enemy_x = 0;
enemy_y = rand() % width;
}
if (speed == 1)
for (int i = 1; i &<= 10000; i++)//用來控制敵機的速度
{
for (int j = 1; j &<= 1000; j++)
{
speed = 1;
}
}
speed = 0;
if (speed == 0)
{
enemy_x++;
speed = 1;
}
}
void updateWithInput()//與輸入有關的更新
{
char input;
if (kbhit())//在VC6.0++下,為_kbhit()
{
input = getch();//在VC6.0++下為_getch();
if (input == a)
position_y--;
if (input == s)
position_x++;
if (input == d)
position_y++;
if (input == w)
position_x--;
if (input == )
{
bullet_x = position_x - 1;
bullet_y = position_y;
}
}
}
void show()//展示的內容
{
gotoxy(0, 0);
int i, j;
for (i = 1; i &<= high; i++)
{
for (j = 1; j &<= width; j++)
{
if (map[i][j] == 0)
printf(" ");
if (map[i][j] == 1)
printf("*");
if (map[i][j] == 2)
printf("#");
if (map[i][j] == 3)
printf("~");
if (map[i][j] == 4)
printf("|");
if (map[i][j] == 5)
printf("|");
}
printf("
");
}
printf("
你的得分:%d
", score);
printf("操作說明: ASDW分別操作 左下右上四個的移動
");
printf("**空格是發出子彈**
");
}
int main()
{
starup();
while (1)
{
HideCursor();
startMap();
show();
updateWithoutInput();
updateWithInput();
}
return 0;
}
謝邀。
做遊戲的話,遊戲引擎了解一下。
首先,想做遊戲(不包括控制台文字類遊戲)的人,最快上手的方式我無腦推薦unity+c#。
有c的基礎,c#上手會很快,看半個月語法書,結合幾個unity項目實戰視頻就能了解到最基礎的開發流程,當然更重要的是理解面向對象的思想和常用的設計模式(都是後話了)。
不要相信網上的一些回答從數據結構,演算法導論,編譯原理,操作系統,圖形學...一路啃過去,本科四年時間都不一定夠你啃。只有慢慢深入學習這些成熟的引擎的過程中,才能明白那些內容的存在意義,進而產生學習的慾望,然後再回去啃。
如果一定要c的話...可以從win32窗口編程入手(大坑),然後了解一下遊戲循環的基本概念,找一些畫圖用的庫,花幾個月時間自己搭一個打飛機遊戲的架子應該是問題不大的...(我猜的,我沒這麼做過)
推薦閱讀: