Area: Quik_Bas Msg: #1581 Date: 06-28-92 01:27 (Public) From: Steve Gartrell To: All Subject: No Box Sprites
'You guessed it, I made a goof that didn't show up until 'I modified it to easily allow people to use color 0 if 'they wished. Fixed it...Some day I just know I'm going 'to get it right the first time....|-} DEFINT A-Z DECLARE SUB NoBoxSprite (StartX%, StartY%, Sprite%()) CONST C$ = "Created 6/27/92 by Steve Gartrell. No rights reserved." 'this constant is the color you won't use. CONST NoColor% = 1 SCREEN 13 'paint with color you don't want copied!! PAINT (10, 10), NoColor% 'Ain't nothing like a personalized example!! (What ego?) 'Draw a sprite (I've been called less flattering things!?) CIRCLE (165, 100), 9, 4 PAINT (165, 100), 90, 4 CIRCLE (165, 100), 8, 4, 0, 3.14 CIRCLE (165, 100), 9, 90, 3.14, 6.28 PSET (162, 99), 122 CIRCLE (162, 99), 3, 6 PSET (168, 99), 122 CIRCLE (168, 99), 3, 6 CIRCLE (165, 103), 3, 42, 3.43, 5.83 cell% = 0 REDIM Sprite%(0 TO 441) Sprite%(0) = 21 'make things easier-# of rows in cell 0 ' which is always EndY% - StartY% + 1!!! 'Copy the sprite into an array... FOR y% = 90 TO 110 FOR x% = 155 TO 175 cell% = cell% + 1 Sprite%(cell%) = POINT(x%, y%) NEXT NEXT 'Borrowed this random pattern generator from Rich Geldreich!! 'Modified to prohibit use of color 1 for demo purposes. FOR A = 1 TO 400 RANDOMIZE TIMER IF RND > .05 THEN LINE -(RND * 320, RND * 200), RND * 254 + 1 ELSE LINE -(RND * 320, RND * 200), RND * 254 + 1, BF END IF NEXT StartX% = 160: StartY% = 100 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) DO DO: t$ = UCASE$(INKEY$): LOOP UNTIL LEN(t$) SELECT CASE LEN(t$) CASE 2 SELECT CASE ASC(RIGHT$(t$, 1)) CASE &H48 ' 72 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) StartY% = StartY% - 10 'UP IF StartY% < 0 THEN StartY% = 180 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) CASE &H50 ' 80 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) StartY% = StartY% + 10 'DOWN IF StartY% > 180 THEN StartY% = 0 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) CASE &H4B ' 75 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) StartX% = StartX% - 10 'LEFT (Down 10) IF StartX% < 0 THEN StartX% = 300 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) CASE &H4D ' 77 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) StartX% = StartX% + 10 'RIGHT IF StartX% > 300 THEN StartX% = 0 CALL NoBoxSprite(StartX%, StartY%, Sprite%()) CASE ELSE BEEP: BEEP END SELECT CASE ELSE IF t$ = "Q" THEN EXIT DO ELSE BEEP: BEEP END IF END SELECT LOOP SCREEN 0 WIDTH 80 COLOR 7, 0 END SUB NoBoxSprite (StartX%, StartY%, Sprite%()) cell% = 1 NumCells% = UBOUND(Sprite%) NumRows% = ABS(Sprite(0)) EndX% = StartX% + NumCells% \ NumRows% - 1 StartY& = StartY% * 320& EndY& = StartY& + (NumRows% - 1) * 320& 'check sign to see if it's a sprite or a background SELECT CASE Sprite%(0) CASE IS > 0 FOR y& = StartY& TO EndY& STEP 320 FOR x% = StartX% TO EndX% IF Sprite%(cell%) <> NoColor% THEN DEF SEG = &HA000 addr& = y& + x% CurrentPix% = PEEK(addr&) POKE addr&, Sprite%(cell%) IF CurrentPix% = NoColor% THEN CurrentPix% = -1 END IF Sprite%(cell%) = CurrentPix% DEF SEG END IF cell% = cell% + 1 NEXT NEXT CASE ELSE FOR y& = StartY& TO EndY& STEP 320 FOR x% = StartX% TO EndX% IF Sprite%(cell%) <> NoColor% THEN IF Sprite%(cell%) < 0 THEN Sprite(cell%) = NoColor% END IF DEF SEG = &HA000 addr& = y& + x% CurrentPix% = PEEK(addr&) POKE addr&, Sprite%(cell%) Sprite%(cell%) = CurrentPix% END IF cell% = cell% + 1 NEXT NEXT END SELECT 'Toggle sign so know if it's the sprite, or the background Sprite%(0) = Sprite%(0) * -1 END SUB --- DB B1073/071082 * Origin: RadioLink! Columbus, OH (614)766-2162 HST/DS (1:226/140)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET