Pong
I forgot to commit for a while and I haven't done much, but got the very basics of the game pong working. Signed-off-by: deadvey <deadvey@deadvey.com>
This commit is contained in:
@@ -1,27 +1,99 @@
|
||||
game_pong:
|
||||
pusha
|
||||
call .draw_players
|
||||
call .detect_input
|
||||
|
||||
call os_set_graphics_mode
|
||||
; Clears screen and draws both players and ball
|
||||
.draw_screen:
|
||||
call os_set_graphics_mode ; Clear screen
|
||||
.draw_p1:
|
||||
; Player 1
|
||||
mov ax, [p1_x]
|
||||
mov [x_start], ax
|
||||
mov [x_end], ax
|
||||
|
||||
call os_draw_graphical_rectangle
|
||||
mov bx, [p1_y]
|
||||
mov [y_start], bx
|
||||
add bx, [bat_height]
|
||||
mov [y_end], bx
|
||||
|
||||
call os_draw_graphical_rectangle ; Draw player 1
|
||||
.draw_p2:
|
||||
; Player 2
|
||||
mov ax, [p2_x]
|
||||
mov [x_start], ax
|
||||
mov [x_end], ax
|
||||
|
||||
mov bx, [p2_y]
|
||||
mov [y_start], bx
|
||||
add bx, [bat_height]
|
||||
mov [y_end], bx
|
||||
|
||||
call os_draw_graphical_rectangle ; Draw player 1
|
||||
ret
|
||||
|
||||
; Player 1 movements
|
||||
.p1_up:
|
||||
mov dx, [p1_y]
|
||||
sub dx, 5
|
||||
mov [p1_y], dx
|
||||
call .draw_players
|
||||
jmp .detect_input
|
||||
.p1_down:
|
||||
mov dx, [p1_y]
|
||||
add dx, 5
|
||||
mov [p1_y], dx
|
||||
call .draw_players
|
||||
jmp .detect_input
|
||||
|
||||
; Player 2 movements
|
||||
.p2_up:
|
||||
mov dx, [p2_y]
|
||||
sub dx, 5
|
||||
mov [p2_y], dx
|
||||
call .draw_players
|
||||
jmp .detect_input
|
||||
.p2_down:
|
||||
mov dx, [p2_y]
|
||||
add dx, 5
|
||||
mov [p2_y], dx
|
||||
call .draw_players
|
||||
jmp .detect_input
|
||||
|
||||
; Ball bouncing
|
||||
.bounce_ball:
|
||||
|
||||
call os_set_text_mode
|
||||
jmp .finish
|
||||
|
||||
.detect_input:
|
||||
call os_read_input
|
||||
cmp al, 08h
|
||||
je .finish
|
||||
jmp .detect_input
|
||||
call os_read_input
|
||||
cmp al, 08h
|
||||
je .finish
|
||||
|
||||
; Player 1
|
||||
cmp al, 77h ; Pressed 'w' (player 1 up)
|
||||
je .p1_up
|
||||
cmp al, 73h ; Pressed 's' (player 1 down)
|
||||
je .p1_down
|
||||
|
||||
; Player 2
|
||||
cmp al, 5bh ; Pressed '[' (player 2 up)
|
||||
je .p2_up
|
||||
cmp al, 27h ; Pressed ''' (player 2 down)
|
||||
je .p2_down
|
||||
|
||||
jmp .detect_input
|
||||
|
||||
.finish:
|
||||
call os_set_text_mode
|
||||
popa
|
||||
ret
|
||||
call os_set_text_mode
|
||||
call os_start_cli
|
||||
|
||||
section .data
|
||||
x_start dw 5
|
||||
y_start dw 5
|
||||
x_end dw 30
|
||||
y_end dw 46
|
||||
colour db 1100b
|
||||
ball_x dw 5
|
||||
ball_y dw 5
|
||||
|
||||
p1_x dw 5
|
||||
p1_y dw 5
|
||||
|
||||
p2_x dw 315
|
||||
p2_y dw 5
|
||||
|
||||
bat_height dw 20
|
||||
|
86
source/games/pong_old.asm
Normal file
86
source/games/pong_old.asm
Normal file
@@ -0,0 +1,86 @@
|
||||
game_pong:
|
||||
pusha
|
||||
call os_set_graphics_mode
|
||||
jmp .draw_player_1
|
||||
jmp .draw_player_2
|
||||
jmp .detect_inputi
|
||||
.draw_player_1:
|
||||
; X coords
|
||||
mov ax, [p1_x]
|
||||
mov [x_start], ax
|
||||
mov [x_end], ax
|
||||
|
||||
; Y coords
|
||||
mov bx, [p1_y]
|
||||
mov [y_start], bx
|
||||
add bx, [bat_height] ; Add the bat height to the y coord
|
||||
mov [y_end], b
|
||||
call os_draw_graphical_rectangle
|
||||
ret
|
||||
.draw_player_2:
|
||||
; X coords
|
||||
mov ax, [p2_x]
|
||||
mov [x_start], ax
|
||||
mov [x_end], ax
|
||||
|
||||
; Y coords
|
||||
mov bx, [p2_y]
|
||||
mov [y_start], bx
|
||||
add bx, [bat_height] ; Add the bat height to the y coord
|
||||
mov [y_end], bx
|
||||
|
||||
call os_draw_graphical_rectangle
|
||||
ret
|
||||
.detect_input:
|
||||
call os_read_input
|
||||
; Exit if backspace is pressed
|
||||
cmp al, 08h
|
||||
je .finish
|
||||
; Go up when you press 'w'
|
||||
cmp al, 77h
|
||||
je .p1_up
|
||||
; Go up when you press 's'
|
||||
cmp al, 73h
|
||||
je .p1_down
|
||||
|
||||
; Loop back
|
||||
jmp .detect_input
|
||||
.p1_down:
|
||||
; X coords
|
||||
mov ax, [p1_x]
|
||||
mov [x_start], ax
|
||||
mov [x_end], ax
|
||||
|
||||
; Y coords
|
||||
mov bx, [p1_y]
|
||||
add bx, 5 ; Move the bat down 5
|
||||
mov [y_start], bx
|
||||
add bx, [bat_height] ; Add the bat height to the y coord
|
||||
mov [y_end], bx
|
||||
|
||||
call os_draw_graphical_rectangle
|
||||
ret
|
||||
.p1_up:
|
||||
mov ax, [move_distance]
|
||||
sub ax, [p1_y]
|
||||
call os_draw_graphical_rectangle
|
||||
ret
|
||||
.finish:
|
||||
call os_set_text_mode
|
||||
popa
|
||||
ret
|
||||
|
||||
section .data
|
||||
x_start dw 0
|
||||
y_start dw 0
|
||||
x_end dw 0
|
||||
y_end dw 0
|
||||
|
||||
p1_y dw 5
|
||||
p2_y dw 0
|
||||
p1_x dw 5
|
||||
p2_x dw 30
|
||||
|
||||
bat_height dw 20
|
||||
move_distance dw 5
|
||||
colour db 1111b
|
Reference in New Issue
Block a user