Pascal遊戲開發入門 一 概覽

2021-10-24 14:56:46 字數 2678 閱讀 5252

常見的遊戲開發有c/c++(unreal), c#(unity)等, pascal語言的也有(但是和前者對比不夠流行。

關於pascal的優勢,網上都說時易於教學,可以培養良好的程式習慣云云,我只是聽之而已。

如果說最後需要c++,為什麼一開始就面對呢,非要用pascal繞一圈,得不償失的。

以上僅是個人觀點

在pascal基礎系列文章第一篇我曾寫到閒的無聊,學習一下pascal, 目前也是如此。

如果為了學習遊戲開發,快速上手自然要用unreal或者unity。 從基礎做起,估計要學習圖形學之類的知識。

但是我是閒情偶記(記錄的記)

本系列關注於2d code,不關注遊戲性(關卡設計等)以及遊戲相關資源(字型,美術,**音效等)的建立

pascal是跨平台的,如果要寫的程式也要跨平台,可能需要使用opengl(相比vulkan可以支援更多的舊裝置)好一些。

但是為了偷懶,決定使用sdl2。優點如下

sudo apt install libsdl2-dev libsdl2-gfx-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev

sudo apt install lazarus make

開始之前需要了解遊戲的大體的執行機制

部分平台的markdown不支援flowchart…

這就是遊戲的基本框架,看起來很簡單.

建立乙個視窗,5秒後會自動關閉

program test01;

uses sysutils,sdl2;

var

pw : psdl_window;

pr : psdl_renderer;

begin

// init

sdl_init(sdl_init_video);

if sdl_wasinit(sdl_init_video)<>0 then writeln('video init');

pw := sdl_createwindow('hello',sdl_windowpos_centered,sdl_windowpos_centered,800,450,

sdl_window_shown);

pr := sdl_createrenderer(pw,-1,0);

// render

sdl_setrenderdrawcolor(pr,0,0,0,255);

sdl_renderclear(pr);

sdl_renderpresent(pr);

sdl_delay(5000);

// clean

sdl_destroywindow(pw);

sdl_destroyrenderer(pr);

sdl_quit();

end.

接下來加入輸入部分(暫時忽略物理計算)

isrunning := true;

while isrunning do

begin

// handle input

if sdl_pollevent(@e)=1 then

begin

case e.type_ of

sdl_quitev: isrunning := false;

end;

end;

// todo: do physics and then update

// render

sdl_setrenderdrawcolor(pr,0,0,0,255);

sdl_renderclear(pr);

sdl_renderpresent(pr);

end;

使用oop來整理一下

type tgame = class

private

pw : psdl_window;

pr : psdl_renderer;

public

isrunning: boolean;

procedure init(title : string;x,y,h,w,flags:integer );

procedure render();

procedure update();

procedure handleevents();

procedure clean();

end;

var

g : tgame;

begin

g := tgame.create;

g.init('hello',sdl_windowpos_centered,sdl_windowpos_centered,600,400,sdl_window_shown);

while g.isrunning do

begin

g.handleevents;

g.update;

g.render;

end;

g.clean;

g.free;

end.

makefile

main:main.pas

fpc -gh -fusdl2 -fl. main.pas

**參考

GO Grpc微服務開發一 概覽

git github.com juelite micro srv.git readme.md common 公共包 common.go 實現一些基礎方法,如配置檔案讀取,獲取redis控制代碼等 register.go 服務註冊封裝 conf 配置檔案目錄 config.conf 專案配置檔案,如c...

firewalld學習筆記(一)概覽

之前曾幾次接觸過linux系統,但始終不得法門,不入門就很難繼續下去。而立之年,緣分悄然而至,終於對linux有了些許入門的感覺,雖然還是小白 菜鳥,但是只要能入門,學起來也就快多了。雖說有了ubuntu這種圖形化的版本,但是linux的精髓還是命令列的方式,而且主要用途是伺服器而非家庭pc機。機緣...

RocketMQ訊息儲存一 概覽

前面介紹了訊息的傳送,這節主要介紹訊息的儲存。這裡只關注普通資訊,事務訊息在後面介紹。一般有分布式kv 檔案系統 db等,不同的mq根據設計的不同有各自的選擇,rocketmq同kafka一樣,選擇了檔案系統作為儲存方式,在儲存設計上借鑑了kafka。kafka將訊息用topic partition...