FTL
Retro Member
- Joined
- 4 Ιουλ 2007
- Μηνύματα
- 187
- Αντιδράσεις
- 11
Ένας δρομέας διασχίζει το παράθυρο της κονσόλας των Windows XP, είναι γραμμένο με τον Fasm Assembler και χρησιμοποιώ ορισμένα animation frames.
Στο zip αρχείο θα βρείτε το εκτελέσιμο, πιθανόν να μην τρέξει στα Vista όμως, δεν το έχω δοκιμάσει πάντως εκεί.
Το κάνω πόστ παρόλο που ίσως να μην ταιριάζει απόλυτα με το 'Game Programming...the old way' ελπίζω να είναι οκ.
Στο zip αρχείο θα βρείτε το εκτελέσιμο, πιθανόν να μην τρέξει στα Vista όμως, δεν το έχω δοκιμάσει πάντως εκεί.
Το κάνω πόστ παρόλο που ίσως να μην ταιριάζει απόλυτα με το 'Game Programming...the old way' ελπίζω να είναι οκ.
Κώδικας:
; Running Man Asm written by Nick Kouvaris
; http://lightforce.freestuff.gr
; Fasm Assembler v1.67.26
format pe console
entry start
include 'c:\fasm\include\win32axp.inc'
ICON_SIZE = 744
COLUMNS = 80
ROWS = 25
macro ImageData {
rept 7 x \{
img\#x FILE 'img'\#\`x\#'.ico':22
\}
}
macro CreateImages {
rept 7 x \{
invoke CreateIconFromResource,img\#x,ICON_SIZE,TRUE,030000h
mov [hImg\#x],eax
\}
}
section '.code' code readable writeable executable
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov [stdout],eax
mov [rect.Left],0
mov [rect.Top],0
mov [rect.Right],COLUMNS -1
mov [rect.Bottom],ROWS -1
mov [coord.x],COLUMNS
mov [coord.y],ROWS
mov [cur.dwSize],25
mov [cur.bVisible],FALSE
cinvoke system,<'cls'>
invoke SetConsoleTitle,<'Running Man'>
invoke SetConsoleWindowInfo,[stdout],1,rect
invoke SetConsoleScreenBufferSize,[stdout],dword[coord]
invoke SetConsoleCursorInfo,[stdout],cur
invoke FindWindow,NULL,<'Running Man'>
mov [hWnd],eax
invoke GetDC,[hWnd]
mov [hDC],eax
CreateImages
mov esi,-32
run:
rept 7 x {
invoke DrawIcon,[hDC],esi,270,[hImg#x]
invoke Sleep,60
inc esi
inc esi
}
cmp esi,COLUMNS*8
jl @f
mov esi,-32
@@:
cinvoke _kbhit
test eax,eax
jz run
invoke ReleaseDC,[hWnd],[hDC]
invoke ExitProcess,0
section '.data' data readable writeable
struc COORD {
.x dw ?
.y dw ?
}
struc SMALL_RECT {
.Left dw ?
.Top dw ?
.Right dw ?
.Bottom dw ?
}
struc LPCONSOLE_CURSOR_INFO {
.dwSize dd ?
.bVisible db ?
}
cur LPCONSOLE_CURSOR_INFO
rect SMALL_RECT
coord COORD
stdout dd ?
hWnd dd ?
hDC dd ?
hImg1 dd ?
hImg2 dd ?
hImg3 dd ?
hImg4 dd ?
hImg5 dd ?
hImg6 dd ?
hImg7 dd ?
ImageData
section '.idata' import data readable writeable
library kernel32,'kernel32.dll',\
msvcrt,'msvcrt.dll',\
user32,'user32.dll'
import msvcrt,\
system,'system',\
_kbhit,'_kbhit'
include 'c:\fasm\include\api\kernel32.inc'
include 'c:\fasm\include\api\user32.inc'