SHOW:
|
|
- or go back to the newest paste.
1 | '/ Block Breaker V1.0 by Mysoft /' | |
2 | ||
3 | #include "MyTDT\GfxResize.bas" | |
4 | #include "windows.bi" | |
5 | #include "win\uxtheme.bi" | |
6 | #Include "fbgfx.bi" | |
7 | #include "crt.bi" | |
8 | ||
9 | 'macros / constants / types / globals better be here at the start | |
10 | ||
11 | #define KEY_ARROW_LEFT 255+75*256 | |
12 | #define KEY_ARROW_UP 255+72*256 | |
13 | #define KEY_ARROW_DOWN 255+80*256 | |
14 | - | #define IsKey(_N) 255+fb.##_N*256 |
14 | + | |
15 | - | |
15 | + | #define IsKey(_N) -fb.##_N |
16 | #define cx(_N) (((_N)-1)*8) | |
17 | #define cy(_N) (((_N)-1)*8) | |
18 | - | |
18 | + | |
19 | const ScrWid=40 , ScrHei=30 | |
20 | const CursorColor = 0 , FlashColor = 15 | |
21 | ||
22 | type Game | |
23 | as long Column,Row | |
24 | as long FlashCol,FlashRow | |
25 | end type | |
26 | ||
27 | dim shared as unsigned byte g_Screen(ScrWid,ScrHei) | |
28 | ||
29 | '#include for the other files can then be done here | |
30 | ||
31 | sub RandomizeColor( Row as long , Column as long ) | |
32 | do | |
33 | var iColumn = cint(int(1+rnd*8)) | |
34 | if Column>1 andalso g_Screen(Column-1,Row)=iColumn then continue do | |
35 | if Column<ScrWid andalso g_Screen(Column+1,Row)=iColumn then continue do | |
36 | if Row>1 andalso g_Screen(Column,Row-1)=iColumn then continue do | |
37 | if Row<ScrHei andalso g_Screen(Column,Row+1)=iColumn then continue do | |
38 | color iColumn | |
39 | g_Screen(Column,Row)=iColumn | |
40 | exit sub | |
41 | loop | |
42 | end sub | |
43 | ||
44 | sub SetScreenMode() ' Define a subroutine to set the screen mode | |
45 | Gfx.PreResize() ' Prepare the graphics library for resizing | |
46 | screenres ScrWid*8,ScrHei*8 : width ScrWid,ScrHei ' Set the screen resolution and text width | |
47 | dim as any ptr pWnd ' Declare a pointer to store the window handle | |
48 | screencontrol(fb.GET_WINDOW_HANDLE,*cptr(unsigned integer ptr,@pWnd)) ' Get the window handle | |
49 | SetWindowTheme( pWnd , "" , "" ) ' Remove the window theme | |
50 | Gfx.Resize(ScrWid*16,ScrHei*16) ' Resize the graphics window | |
51 | ||
52 | - | sub MoveCursor( byref Column as long , byref Row as long ) |
52 | + | |
53 | - | dim as long key = GetKey() ' Check for key press |
53 | + | |
54 | - | If key <> 0 Then ' Handle arrow keys |
54 | + | |
55 | - | line( (Column-1)*8 , (Row-1)*8 )-step(7,7),g_Screen(Column,Row),bf |
55 | + | |
56 | - | Select Case key |
56 | + | |
57 | palette 6,128,64,0 'brown | |
58 | - | for N as long = 0 to 2 |
58 | + | |
59 | - | line( (Column-1)*8 , (Row-1)*8 )-step(7,7),FlashColor,bf |
59 | + | |
60 | - | sleep 50 |
60 | + | |
61 | - | line( (Column-1)*8 , (Row-1)*8 )-step(7,7),CursorColor,bf |
61 | + | |
62 | - | sleep 50 |
62 | + | function HandleInput( byref GameState as Game ) as boolean |
63 | - | line( (Column-1)*8 , (Row-1)*8 )-step(7,7),g_Screen(Column,Row),bf |
63 | + | with GameState 'all variables with just .name are inside the GameState structure |
64 | - | next N |
64 | + | do |
65 | dim iKey as long , sKey as string = inkey() | |
66 | - | if column>1 then column -= 1 |
66 | + | If len(sKey)=0 then exit do 'done when no more keys to process |
67 | iKey = sKey[0] : if iKey=255 then iKey=-sKey[1] '>0 = char , <0 = code | |
68 | - | if column<ScrWid then column += 1 |
68 | + | line( cx(.Column) , cy(.Row) )-step(7,7),g_Screen(.Column,.Row),b |
69 | Select Case iKey | |
70 | - | if row>1 then row -= 1 |
70 | + | case 27,-asc("k") 'escape/X button |
71 | return false | |
72 | - | if row<ScrHei then row += 1 |
72 | + | |
73 | if .FlashCol<>0 then 'it's flashing... stop flashing | |
74 | - | line( (Column-1)*8 , (Row-1)*8 )-step(7,7),CursorColor,b |
74 | + | line( cx(.FlashCol) , cy(.FlashRow) )-step(7,7),g_Screen(.Column,.Row),bf |
75 | - | End If |
75 | + | .FlashCol = 0 'no more flashing |
76 | else | |
77 | - | ' Display current position |
77 | + | .FlashCol = .Column |
78 | - | Locate 1, 1 |
78 | + | .FlashRow = .Row |
79 | - | Printf !"Column: %i Row: %i\n",Column,Row |
79 | + | end if |
80 | case IsKey(SC_LEFT) | |
81 | if .column>1 then .column -= 1 | |
82 | case IsKey(SC_RIGHT) | |
83 | if .column<ScrWid then .column += 1 | |
84 | case IsKey(SC_UP) | |
85 | - | dim Column as unsigned long = 1 |
85 | + | if .row>1 then .row -= 1 |
86 | - | dim Row as unsigned long = 1 |
86 | + | |
87 | if .row<ScrHei then .row += 1 | |
88 | End Select | |
89 | line( cx(.Column) , cy(.Row) )-step(7,7),CursorColor,b | |
90 | ' Display current position | |
91 | Locate 1, 1 : Printf !"Column: %i Row: %i\r",.Column,.Row | |
92 | loop | |
93 | end with | |
94 | return true 'keys processed just fine | |
95 | end function | |
96 | ||
97 | - | line( (Column-1)*8 , (Row-1)*8 )-step(7,7),CursorColor,b 'draws initial cursor only |
97 | + | |
98 | ||
99 | - | MoveCursor(Column,Row) |
99 | + | dim g as Game |
100 | g.Column = 1 : g.Row = 1 | |
101 | g.FlashCol = 0 'not flashing | |
102 | ||
103 | - | main() |
103 | + | |
104 | - | sleep |
104 | + | |
105 | for FillHeight as long = 1 to ScrHei step 1 ' Loop through each row of the screen | |
106 | for FillWidth as long = 1 to ScrWid step 1 ' Loop through each column of the screen | |
107 | RandomizeColor(FillHeight , FillWidth) | |
108 | print chr(219); | |
109 | next | |
110 | next | |
111 | ||
112 | line( (g.Column-1)*8 , (g.Row-1)*8 )-step(7,7),CursorColor,b 'draws initial cursor only | |
113 | while HandleInput(g) | |
114 | ||
115 | if g.FlashCol<>0 then 'something is flashing | |
116 | static as long FlashState | |
117 | FlashState += 1 : if FlashState = 4 then FlashState=0 | |
118 | dim as long CurFlashColor = g_Screen(g.Column,g.Row) | |
119 | if FlashState=1 then CurFlashColor = FlashColor | |
120 | if FlashState=3 then CurFlashColor = CursorColor | |
121 | line( (g.FlashCol-1)*8 , (g.FlashRow-1)*8 )-step(7,7),CurFlashColor,bf | |
122 | end if | |
123 | ||
124 | sleep 30 | |
125 | ||
126 | wend | |
127 | end sub | |
128 | ||
129 | main() | |
130 |