Apologies, I'm on Vista Home Basic - I have patched DarkBasic to v1.2 so was hoping that this wasn't a Vista compatibility issue.
I've attached some sample code, although as I said I seem to have this issue with pretty much anything I run, from "hello world" to a Space Invaders or Pong clone. This is very rough code (my first attempt at controlling and animating a sprite) and I'm having some problems with the sprite collision (which may be the subject of another thread!) but when I run this some of the time the background black screen will flash white and then back to black very quickly - and sometimes it won't.
Many thanks!
rem Fighter Chase by Jim
rem initialise the screen
hide mouse
sync on
randomize timer()
rem initialise variables
PlayerSprite = 1
EnemySprite = 2
DirEnSprite = 7
DirPlSprite = 2
playerposx = 50
playerposy = 50
playerchangex = 0
playerchangey = 0
enemyposx = 320
enemyposy = 240
movesteps = 0
movespeed = 5
movedir = 0
gamecounter = 0
rem load the bitmaps
load bitmap "playern.bmp", 1
get image 1, 0, 0, 31, 31
load bitmap "playere.bmp", 2
get image 2, 0, 0, 31, 31
load bitmap "players.bmp", 3
get image 3, 0, 0, 31, 31
load bitmap "playerw.bmp", 4
get image 4, 0, 0, 31, 31
load bitmap "enemyn.bmp", 5
get image 5, 0, 0, 31, 31
load bitmap "enemye.bmp", 6
get image 6, 0, 0, 31, 31
load bitmap "enemys.bmp", 7
get image 7, 0, 0, 31, 31
load bitmap "enemyw.bmp", 8
get image 8, 0, 0, 31, 31
cls
rem position initial sprites on the screen
sprite PlayerSprite, playerposx, playerposy, 2
sprite EnemySprite, enemyposx, enemyposy, 7
do
rem move enemy randomly
rem only run below randomisers once the current movement is done
if gamecounter = abs(movesteps)
gamecounter = 0
movesteps = rnd(20)+1
movedir = rnd(1)
if movedir = 0
movespeed = movespeed * -1
endif
movereverse = rnd(1)
endif
if movereverse = 0
enemyposx = enemyposx + movespeed
if enemyposx < 20
enemyposx = 20
movespeed = movespeed * -1
else
if enemyposx > 600
enemyposx = 600
movespeed = movespeed * -1
endif
endif
endif
if movereverse = 1
enemyposy = enemyposy + movespeed
if enemyposy < 20
enemyposy = 20
movespeed = movespeed * -1
else
if enemyposy > 440
enemyposy = 440
movespeed = movespeed * -1
endif
endif
endif
rem check which sprite should be used for enemy
if abs(movespeed) = movespeed
imagesign = 1
rem imagedir 1 equals positive
else
imagesign = 0
rem imagedirhor 0 equals negative
endif
if movereverse = 1
imageaxis = 0
rem imagedirvert 0 means in the x axis
else
imageaxis = 1
rem imagedirvery 1 means in the y axis
endif
if imagesign = 1 and imageaxis = 1 then DirEnSprite = 6
if imagesign = 0 and imageaxis = 1 then DirEnSprite = 8
if imagesign = 1 and imageaxis = 0 then DirEnSprite = 7
if imagesign = 0 and imageaxis = 0 then DirEnSprite = 5
rem control the user sprite
up = upkey()
down = downkey()
left = leftkey()
right = rightkey()
if left = 1 and playerposx > 20
playerposx = playerposx - 5
DirPlSprite = 4
endif
if right = 1 and playerposx < 600
playerposx = playerposx + 5
DirPlSprite = 2
endif
if up = 1 and playerposy > 20
playerposy = playerposy - 5
DirPlSprite = 1
endif
if down = 1 and playerposy < 440
playerposy = playerposy + 5
DirPlSprite = 3
endif
rem check for collision
spritehit = sprite hit(EnemySprite, PlayerSprite)
if spritehit > 0
set text size 40
set text font "Arial"
ink 1, 0
center text 320, 240, "You win!"
exit
endif
rem draw sprites
sprite PlayerSprite, playerposx, playerposy, DirPlSprite
sprite EnemySprite, enemyposx, enemyposy, DirEnSprite
sync
gamecounter = gamecounter + 1
loop