Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 11.02.2012, 18:33   #46
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Ответ: Flight

вот код игры и вложения
Вложения
Тип файла: rar 2_flight.rar (34.7 Кб, 618 просмотров)
(Offline)
 
Ответить с цитированием
Старый 11.02.2012, 19:22   #47
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Flight

Вот так:
Graphics 1600,900,1

SetBuffer BackBuffer()



Type player 
Field x,px,deltax
Field y,py,deltay
End Type 


Type car 
Field x,px,deltax
Field y,py,deltay
End Type

Type TBullet
   Field bx#, by#, angle#
End Type

Function TBullet_Update()
   For b.TBullet = Each TBullet
       bx = bx - Cos(angle)*2
       by = by -Sin(angle)*2

             If bx<0 Or bx>GraphicsWidth() Or by<0 Or by>GraphicsHeight() Then
            Delete b
       End If
   Next
End Function

Function TBullet_Draw()
   For b.TBullet = Each TBullet
       Oval(bx - 3, by - 3, 6, 6)
   Next
End Function


Global bx=140
Global by=100
Global chn=Rnd(4)
Global w=LoadImage("w.bmp")
Global Tbullet=LoadImage("shot.bpm")
Global dmgC#
Global y=100
Global x=100
Global speed#=3
Global zdorov#=100
Global speedc#=5
Global hp100=LoadImage("hp100.bmp")
Global hp80=LoadImage("hp80.bmp")
Global hp60=LoadImage("hp60.bmp")
Global hp40=LoadImage("hp40.bmp")
Global hp20=LoadImage("hp20.bmp")
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global angle
Global player=LoadImage("1.bmp")
TFormFilter enable=0
RotateImage player,90
MidHandle player
Global ground=LoadImage ("ground1.bmp")

Global house1=LoadImage ("house1.bmp")
Global house2=LoadImage ("house2.bmp")


Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)
Dim playerg(361)
For t=0 To 361 
playerg(t)=CopyImage(player)
MaskImage playerg(t),0,0,0
RotateImage playerg(t),t
Next

MaskImage hp100,255,255,255
MaskImage hp80,255,255,255
MaskImage hp60,255,255,255
MaskImage hp40,255,255,255
MaskImage hp20,255,255,255

MaskImage player,0,0,10

TileImage ground,0,0,0

Function updateplayer()
player_angle=ATan2(MouseY()-y,MouseX()-x)+180


If MouseDown(1) Then 
b.Tbullet=New Tbullet
bx=x
by=y
angle=player_angle

EndIf 
 
DrawImage ground,0,0
DrawImage w,700,100

DrawImage house1,300,340
DrawImage house2,750,340
DrawImage house2,-200,340
DrawImage house1,750,340
DrawImage house2,1250,340
DrawImage house2,750,-90
DrawImage house2,950,-90
DrawImage house2,15,-90
DrawImage house2,0,-90

DrawImage car,555,cy

MaskImage cursor,255,255,255


px=x+speed*deltax
py=y+speed*deltay

DrawImage playerg(Int(player_angle)),x,y
Text 0,10,player_angle

If x<0 Then x = 1366
If x>1366 Then x = 0
If y<0 Then y = 768
If y>768 Then y = 0

cursorX=MouseX() 
cursorY=MouseY() 
DrawImage cursor,MouseX(),MouseY() 

If KeyDown(200) Or KeyDown(17) Then
deltay=-1

EndIf 

If KeyDown(208) Or KeyDown(31)
deltay=1

EndIf

If KeyDown(203) Or KeyDown(30)

deltax=-1
EndIf

If KeyDown(205) Or KeyDown(32)
deltax=1

EndIf

px=x+speed#*deltax
py=y+speed#*deltay

;DrawImage house1,300,340
;DrawImage house2,750,340
;DrawImage house2,-200,340
;DrawImage house1,750,340
;DrawImage house2,1250,340
;DrawImage house2,750,-90
;DrawImage house2,950,-90
;DrawImage house2,15,-90
;DrawImage house2,0,-90


If Not ImagesCollide (house1,300,340,0,player,px,py,0) 
x=px
y=py
EndIf 





If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov#=zdorov#-2
If zdorov#>80 And zdorov#=<100 Then DrawImage hp100,5,5
If zdorov#>60 And zdorov#=<80 Then DrawImage hp80,5,5
If zdorov#>40 And zdorov#=<60 Then DrawImage hp60,5,5
If zdorov#>20 And zdorov#=<40 Then DrawImage hp40,5,5
If zdorov#>0 And zdorov#=<20 Then DrawImage hp20,5,5
If zdorov#<0 Then DrawImage endd,0,0



End Function 
While Not KeyDown(1)
updateplayer()
TBullet_Update()
TBullet_Draw()
Flip 
Cls

DrawImage polosa,538,83

If 1=1 Then cy=cy+speedc#
If cy<0 Then cy = 768
If cy>768 Then cy = 0
If ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc#=1
If Not ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc#=5



Wend
(Offline)
 
Ответить с цитированием
Старый 11.02.2012, 19:39   #48
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Flight

Сообщение от undertaker Посмотреть сообщение
вот код игры и вложения
Если у персонажа все еще отображается белая полоса сбоку,то это из-за того что маска неоднородна.
В архиве нет exe)
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 11.02.2012, 19:49   #49
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Flight

Вот exe. Думаю, undertaker не против .
Вложения
Тип файла: rar flight.rar (479.1 Кб, 621 просмотров)
(Offline)
 
Ответить с цитированием
Старый 11.02.2012, 19:58   #50
Spy4433
ПроЭктировщик
 
Аватар для Spy4433
 
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений
(для 63 пользователей)
Ответ: Flight

вот вроде все норм пашет
добавил таймер стрельбы
добавил таймер для ограничения фпс
пометил ошибки
Graphics 1024,768,32,2

SetBuffer BackBuffer()
FPS=CreateTimer(60); создаем таймер для ограничения фпс это нужно что бы количество кадров\сек был стабильно


Type player 
Field x,px,deltax
Field y,py,deltay
End Type 


Type car 
Field x,px,deltax
Field y,py,deltay
End Type

Type TBullet
   Field bx#, by#, angle#
End Type

Function TBullet_Update()
   For b.TBullet = Each TBullet
		;bx = bx + Cos( b\angle ) * 2 твоя версия ошибку видишь 
       b\bx = b\bx- Cos( b\angle ) * 4 ;тут меняем + на - чтобы пуля летела в нужное направлние 
       b\by = b\by -Sin( b\angle ) * 4 ;тут меняем + на - чтобы пуля летела в нужное направлние 

             If b\bx<0 Or b\bx>GraphicsWidth() Or b\by<0 Or b\by>GraphicsHeight() Then
            Delete b
       End If
   Next
End Function

Function TBullet_Draw()
   For b.TBullet = Each TBullet
       Oval(b\bx - 3, b\by - 3, 6, 6)
   Next
End Function


Global bx=140
Global by=100
Global chn=Rnd(4)
Global w=LoadImage("w.bmp")
Global Tbullet=LoadImage("shot.bpm")
Global dmgC#
Global y=100
Global x=100
Global speed#=3
Global zdorov#=100
Global speedc#=5
Global hp100=LoadImage("hp100.bmp")
Global hp80=LoadImage("hp80.bmp")
Global hp60=LoadImage("hp60.bmp")
Global hp40=LoadImage("hp40.bmp")
Global hp20=LoadImage("hp20.bmp")
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global player=LoadImage("1.bmp")
Global player_angle ;добавим в глобал что бы при стрельбе получить угол плеера
TFormFilter enable=0
RotateImage player,90
MidHandle player
Global ground=LoadImage ("ground1.bmp")

Global house1=LoadImage ("house1.bmp")
Global house2=LoadImage ("house2.bmp")


Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)
Dim playerg(361)
For t=0 To 361 
playerg(t)=CopyImage(player)
MaskImage playerg(t),0,0,0
RotateImage playerg(t),t
Next

MaskImage hp100,255,255,255
MaskImage hp80,255,255,255
MaskImage hp60,255,255,255
MaskImage hp40,255,255,255
MaskImage hp20,255,255,255

MaskImage player,0,0,10

TileImage ground,0,0,0

Function updateplayer()
player_angle=ATan2(MouseY()-y,MouseX()-x)+180
 
DrawImage ground,0,0
DrawImage w,700,100

DrawImage house1,300,340
DrawImage house2,750,340
DrawImage house2,-200,340
DrawImage house1,750,340
DrawImage house2,1250,340
DrawImage house2,750,-90
DrawImage house2,950,-90
DrawImage house2,15,-90
DrawImage house2,0,-90

DrawImage car,555,cy

MaskImage cursor,255,255,255


px=x+speed*deltax
py=y+speed*deltay

DrawImage playerg(Int(player_angle)),x,y
Text 0,10,player_angle

If x<0 Then x = 1366
If x>1366 Then x = 0
If y<0 Then y = 768
If y>768 Then y = 0

cursorX=MouseX() 
cursorY=MouseY() 
DrawImage cursor,MouseX(),MouseY() 

If KeyDown(200) Or KeyDown(17) Then
deltay=-1

EndIf 

If KeyDown(208) Or KeyDown(31)
deltay=1

EndIf

If KeyDown(203) Or KeyDown(30)

deltax=-1
EndIf

If KeyDown(205) Or KeyDown(32)
deltax=1

EndIf

px=x+speed#*deltax
py=y+speed#*deltay

;DrawImage house1,300,340
;DrawImage house2,750,340
;DrawImage house2,-200,340
;DrawImage house1,750,340
;DrawImage house2,1250,340
;DrawImage house2,750,-90
;DrawImage house2,950,-90
;DrawImage house2,15,-90
;DrawImage house2,0,-90


If Not ImagesCollide (house1,300,340,0,player,px,py,0) 
x=px
y=py
EndIf 





If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov#=zdorov#-2
If zdorov#>80 And zdorov#=<100 Then DrawImage hp100,5,5
If zdorov#>60 And zdorov#=<80 Then DrawImage hp80,5,5
If zdorov#>40 And zdorov#=<60 Then DrawImage hp60,5,5
If zdorov#>20 And zdorov#=<40 Then DrawImage hp40,5,5
If zdorov#>0 And zdorov#=<20 Then DrawImage hp20,5,5
If zdorov#<0 Then DrawImage endd,0,0



End Function 
While Not KeyDown(1)
updateplayer()
TBullet_Update()
TBullet_Draw()
Flip 
Cls
WaitTimer(FPS) ;ограничение FPS

DrawImage polosa,538,83

If 1=1 Then cy=cy+speedc#
If cy<0 Then cy = 768
If cy>768 Then cy = 0
If ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc#=1
If Not ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc#=5



If MouseDown(1) Then 
If MilliSecs()>timer_shoot+200 Then
timer_shoot=MilliSecs()
Local b.Tbullet=New Tbullet
;bx=x и снова ошибка 
b\bx=x
b\by=y
b\angle =player_angle+Rnd(-5,5)
EndIf 
EndIf Wend
И незабудь тыкнуть на Полезно если помог
__________________
форум эт вещь... и почему я раньше им не пользовался?

AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
(Offline)
 
Ответить с цитированием
Старый 11.02.2012, 20:02   #51
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Flight

Медленно, бро. Да и тут дельта-тайминг нужен, а не Timer'ы.
Миниатюры
Нажмите на изображение для увеличения
Название: 1239700668497.jpg
Просмотров: 798
Размер:	7.4 Кб
ID:	16150  
(Offline)
 
Ответить с цитированием
Старый 11.02.2012, 20:24   #52
Spy4433
ПроЭктировщик
 
Аватар для Spy4433
 
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений
(для 63 пользователей)
Ответ: Flight

пока и так сойдет
__________________
форум эт вещь... и почему я раньше им не пользовался?

AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 02:03   #53
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Flight

Накатал пример, который демонстрирует взаимодействие игрока с врагами.
Можно стрелять, ходить, стрелять, умирать :D
Управление: WSAD + MOUSE
Graphics(800,600,0,2)
SetBuffer(BackBuffer())
SeedRnd(MilliSecs())
SetFont(LoadFont("Tahoma cyr", 16))


; Player position
Global player_x# = GraphicsWidth() * 0.5
Global player_y# = GraphicsHeight() * 0.5
Global player_shotdelay = 350 ; Delay per shot
Global player_shottime = 0
Global player_hp = 100
Global player_maxhp = 100
Global player_score = 0

Global spawner_level = 1
Global spawner_time = 0
Global spawner_delay = 6200


; Loop
While Not KeyHit(1)
	
	;====== UPDATE PPLAYER =====
	; Calc view angle
	Local fang# = ATan2(MouseY() - player_y, MouseX() - player_x)
	; Create bullet while mouse button pressed and shot_time
	If MouseDown(1) And player_shottime < MilliSecs() Then 
		TBullet_Create(player_x, player_y, fang)
		player_shottime = MilliSecs() + player_shotdelay
	EndIf
	; movement
	Local vx = (KeyDown(32) - KeyDown(30))
	Local vy = (KeyDown(31) - KeyDown(17))
	Local mang# = ATan2(vy, vx)
	If (Abs(vx) + Abs(vy)) Then
		player_x = player_x + Cos(mang) * 3
		player_y = player_y + Sin(mang) * 3
	EndIf
	
	
	;====== Enemy spawner ======   
	If spawner_time < MilliSecs() Then
		Local i, sx%, sy%
		For i = 0 To spawner_level
			sx = (Rand(100)>50) * GraphicsWidth()
			sy = (Rand(100)>50) * GraphicsHeight()
		    TEnemy_Create(sx, sy, 1 + Rand(spawner_level))
		Next
		
		spawner_time = MilliSecs() + spawner_delay
		spawner_level = spawner_level + 1
	EndIf


	TBullet_Update() ; update all bullets
    TEnemy_Update() ; update all enemies
	   

	TBullet_Draw() ; Draw all bullets
	TEnemy_Draw(); Draw all enemies
	
	;-- Draw player
	If (player_hp > 0) Then	
		Line(player_x, player_y, player_x + Cos(fang) * 30, player_y + Sin(fang) * 30	)
		Color(255,0,0)
		Oval(player_x - 10,player_y - 10, 20, 20)
		Color(255,255,255)
	Else
		Text(GraphicsWidth()*0.5, GraphicsHeight()*0.5, "YOU SUCK!", True, True)		
	EndIf
	
	Text(5,0, "SCORE: " + player_score+"   " + mang)
	Text(5, 30, "HitPoints: " + player_hp * (player_hp > 0))

	Flip() : Cls()
Wend

EndGraphics
End



Type TBullet
   Field x#, y#, angle#
End Type

Function TBullet_Create(x#, y#, ang#)
	Local this.TBullet = New TBullet
	this\x=x
	this\y=y
	this\angle = ang
End Function

Function TBullet_Update()
   For b.TBullet = Each TBullet
		b\x = b\x + Cos( b\angle ) * 6
		b\y = b\y + Sin( b\angle ) * 6
		
		Local enemy.TEnemy
		For enemy = Each TEnemy
			Local dist# = Sqr((b\x - enemy\x) ^ 2 + (b\y - enemy\y) ^ 2)
			If dist < 28 Then
				enemy\hp = enemy\hp - 1
				b\x = -1000
				Exit
			EndIf
		Next

		If b\x<0 Or b\x>GraphicsWidth() Or b\y<0 Or b\y>GraphicsHeight() Then
            Delete(b)
       	EndIf
   Next
End Function

Function TBullet_Draw()
   For b.TBullet = Each TBullet
       Oval(b\x - 3, b\y - 3, 6, 6)
   Next
End Function



Type TEnemy
    Field x#, y#, angle#
	Field hp%
End Type


Function TEnemy_Create(x#, y#, hp)
	Local this.TEnemy = New TEnemy
	this\x = x
	this\y = y
	this\hp = hp
End Function

Function TEnemy_Update()
	Local this.TEnemy
	For this = Each TEnemy
	    this\angle = ATan2(player_y - this\y, player_x - this\x)
		this\x = this\x + Cos(this\angle)*2
		this\y = this\y + Sin(this\angle)*2
		
		; if distance between player and enemy < 40
		If Sqr((this\x - player_x) ^ 2 + (this\y - player_y) ^ 2)<40 Then
			player_hp = player_hp - 1
		EndIf

		
		
		If this\hp < 1 Then
			player_score = player_score + 1
			Delete(this)
		EndIf
	Next
End Function

Function TEnemy_Draw()
	Local this.TEnemy
	For this = Each TEnemy
		Color(60, 104, 24) ; Zombie ;D
	    Oval(this\x - 12, this\y - 12, 24, 24)
	Next
	Color(255,255,255)
End Function
Прочти внимательно код - там много приёмов которые тебе пригодятся.
Вложения
Тип файла: 7z SimpleB3D Game.7z (443.4 Кб, 650 просмотров)
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
ABTOMAT (12.02.2012), Артем Валерьевич (16.02.2012), Hurrit (12.02.2012), St_AnGer (12.02.2012), undertaker (12.02.2012)
Старый 12.02.2012, 02:13   #54
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Flight

Надо бы его куда-то в другое место поместить. В FAQ может. Он всем пригодится может, не только нубам.
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 05:12   #55
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Flight

Зачем так резко? Вспомни свои первые посты, к примеру.
Я думаю, нет ни одного программиста, который сразу стал невообразимо крут, минуя стадию новичка.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 05:53   #56
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Flight

Сообщение от FireOwl Посмотреть сообщение
Зачем так резко? Вспомни свои первые посты, к примеру.
Я думаю, нет ни одного программиста, который сразу стал невообразимо крут, минуя стадию новичка.
Это ты кому?
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 10:43   #57
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: Flight

?Unable to set graphics mode
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 11:22   #58
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
Ответ: Flight

да, и еще,ник, помнишь, ты мне показывал типо "свою" игру? я нашел точно такую же в интернете и врятли ты сам написал, как ее сделать и код
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 11:49   #59
undertaker
Нуждающийся
 
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений
(для 4 пользователей)
вот новая версия игры,были добавлены выстрелы.
спасибо за помощь:Randomize,Spy4433

Вот она(новая версия)
Вложения
Тип файла: rar flight.rar (387.9 Кб, 616 просмотров)

Последний раз редактировалось Randomize, 12.02.2012 в 12:59.
(Offline)
 
Ответить с цитированием
Старый 12.02.2012, 14:37   #60
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Flight

Из "своих" игр, у меня только Vivo, но её писал я сам(большую часть, в начале мне очень помогали FireOwl и Nex).
2 FireOwl, я undertaker'a лучше знаю, так что мне позволительно так писать Но спорить не буду, все когда-то начинали.
2 undertaker: убери текст под полоской жизни. Плюс, не совсем понятно, что за серые, и более тёмные прямоугольники. Видимо, один из более тёмных это здание, но тогда почему другие - не здания? Либо, это всё здания, но пройти нельзя только через одно.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 06:56.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com