| Class TGame_Form (unit Gameform) |
TForm
the best way to get speed increases is to use the game rules to limit wasted checks etc. I've used a black background and sprites with a black edge to avoid transparent copies. Also bullets are only checked against the sides they are going to (bonuses can't be avoided, but the linked list approach minimizes wasted checks
| Constructors |
| Functions |
procedure exit_buttonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);---------------------------------------------------------------------------- } { Form } { ----------------------------------------------------------------------------
procedure FormDeactivate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormResize(Sender: TObject);
procedure Game_windowPaint(Sender: TObject);
procedure go_buttonClick(Sender: TObject);
procedure New_game_buttonClick(Sender: TObject);
procedure Pause_buttonClick(Sender: TObject);
procedure Collisionwithbonus;
procedure Confine_cursor(trap:boolean);
procedure Createnewbonus;
procedure Increase_score(num:integer);
procedure initialize;not used any more
procedure layoutsquares(destDC:HDC);
procedure Mainloop;
procedure move_monsters;
procedure Move_Players_ship;
procedure NewMonsterBullet(monster:TSprite);
procedure NewShipBullet;
procedure redraw_monsters;
procedure Redraw_monster_bullets;
procedure Redraw_ship_bullets;
procedure Sendmonstershome;
procedure setup_level(lev:integer);
procedure start_game;
procedure stop_game;| Properties |
| Events |
| Variables |
exit_button : TButton;
Game_window : TPaintBox;
go_button : TButton;
New_game_button : TButton;
Panel1 : TPanel;
Panel2 : TPanel;
Panel3 : TPanel;
Panel4 : TPanel;
Pause_button : TButton;| Constructors |
| Functions |
procedure exit_buttonClick(Sender: TObject);don't want game to continue in background
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);I don't like these at all
---------------------------------------------------------------------------- } { Form } { ----------------------------------------------------------------------------
procedure FormDeactivate(Sender: TObject);
procedure FormDestroy(Sender: TObject);used in debug
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);force all redraw, not just quick update
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);enable further processing
procedure FormResize(Sender: TObject);ALT-TAB Procedure TGame_Form.CMDialogKey(var Message: TCMDialogKey); begin { this doesn't work the way I want it to - bugger ! } { if Message.CharCode = VK_TAB then begin {Process the Alt+Tab key here} { showmessage('fderefsd'); Message.result := 1; exit; end; inherited; end;
procedure Game_windowPaint(Sender: TObject);keep top visible
procedure go_buttonClick(Sender: TObject);
procedure New_game_buttonClick(Sender: TObject);
procedure Pause_buttonClick(Sender: TObject);---------------------------------------------------------------------------- } { Button interface and messages stuff } { ----------------------------------------------------------------------------
procedure Collisionwithbonus;
procedure Confine_cursor(trap:boolean);
procedure Createnewbonus;
procedure Increase_score(num:integer);
procedure initialize;Public declarations
not used any more
procedure layoutsquares(destDC:HDC);
procedure Mainloop;Why have I done 4 mini loops - mask = 0,1,2,3 - well I wanted to time individual sections of the code, to see when improvements speeded things up or not. Each screen update is divided into 4 mini updates, and each can be timed using the frame-speed counters, the panels are used to display the cycles of each 'phase' of the clock. I just did it like this at first, then left it in. - debug
procedure move_monsters;
procedure Move_Players_ship;removed this because it was annoying if trap then with cursor_pad do begin tp1 := ClienttoScreen(Point(width div 2,height div 2)); SetCursorPos(tp1.x,tp1.y); tp1 := ClienttoScreen(Point(0,0)); SetRect(tr,tp1.x,tp1.y,tp1.x+width,tp1.y+height); ClipCursor(@tr); end else
procedure NewMonsterBullet(monster:TSprite);
procedure NewShipBullet;hit bonus
procedure redraw_monsters;
procedure Redraw_monster_bullets;check to see if bullet hit a bonus
procedure Redraw_ship_bullets;ought to put a little delay in between levels really
procedure Sendmonstershome;
procedure setup_level(lev:integer);
procedure start_game;
procedure stop_game;during play
| Properties |
| Events |
| Variables |
exit_button : TButton;
Game_window : TPaintBox;
go_button : TButton;
New_game_button : TButton;
Panel1 : TPanel;
Panel2 : TPanel;
Panel3 : TPanel;
Panel4 : TPanel;
Pause_button : TButton;