forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Как сделать такую игру (http://forum.boolean.name/showthread.php?t=20686)

Edmundosik 18.02.2018 13:42

Как сделать такую игру
 
Возможно ли сделать игру похожую на Сокровище монтесумы? :dontknow: Если возможно то как.

Смог сделать только игровую зону
PHP код:

Type block
    Field img
End Type

Graphics 800
,600,32,2
SetBuffer BackBuffer
()

Global 
rcube

DrawCubes
()

While 
Not (KeyHit(1))
    
Flip
Wend
End

Function DrawCubes()
    For 
1 To 9
        SeedRnd MilliSecs
()
        For 
1 To 9
                rcube 
Rand(1,3)
            If 
rcube 1 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_1.jpg")
            EndIf
            If 
rcube 2 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_2.jpg")
            EndIf
            If 
rcube 3 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_3.jpg")
            EndIf
            
DrawBlock b\img,a*60,i*60
        Next
    Next
End 
Function 


P.S Я только начинающий в Blitz

ABTOMAT 18.02.2018 15:15

Ответ: Как сделать такую игру
 
Цитата:

Сообщение от Edmundosik (Сообщение 314674)
Возможно ли сделать игру похожую на Сокровище монтесумы? :dontknow: Если возможно то как.

Смог сделать только игровую зону
PHP код:

Type block
    Field img
End Type

Graphics 800
,600,32,2
SetBuffer BackBuffer
()

Global 
rcube

DrawCubes
()

While 
Not (KeyHit(1))
    
Flip
Wend
End

Function DrawCubes()
    For 
1 To 9
        SeedRnd MilliSecs
()
        For 
1 To 9
                rcube 
Rand(1,3)
            If 
rcube 1 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_1.jpg")
            EndIf
            If 
rcube 2 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_2.jpg")
            EndIf
            If 
rcube 3 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_3.jpg")
            EndIf
            
DrawBlock b\img,a*60,i*60
        Next
    Next
End 
Function 


P.S Я только начинающий в Blitz

Возможно.
Ты же уже как-то написал создание игрового поля?
Продолжай теперь выполнять другие задачи.
Такие как "поменять блоки местами", например.

Edmundosik 18.02.2018 15:31

Ответ: Как сделать такую игру
 
Можете подсказать пожалуйста какая команда может двигать картинки?

ABTOMAT 18.02.2018 16:04

Ответ: Как сделать такую игру
 
В Блице такой команды нет.
(В Unity есть).
Чтобы подвинуть картинку тебе надо стереть всё с экрана и заново отрисовать всё игровое поле, расположив картинки в том порядке, в каком тебе нужно.

Edmundosik 18.02.2018 16:05

Ответ: Как сделать такую игру
 
Спасибо, буду знать.

Edmundosik 18.02.2018 19:58

Ответ: Как сделать такую игру
 
Когда я пытаюсь сохранить тип блока у меня выскакивает ошибка "Stream does not exist"

Вот код
PHP код:

Type block
    Field x
,y
    Field img
    Field id
    Field isclick
End Type

Type savetmp
    Field idget
    Field idnum
End Type

Graphics 800
,600,32,2
SetBuffer BackBuffer
()

Global 
rcube
Global generate

DrawCubes
()

While 
Not (KeyHit(1))
    
Flip
Wend
End

Function DrawCubes()
    
generate 0
    tmp
.savetmp = New savetmp
    tmp
\idnum 0
    tmp
\idget 0
    
For 1 To 9
        SeedRnd MilliSecs
()
        For 
1 To 9
            cubetmp 
OpenFile("data\cubedata\cubetmp.dat")
            
rcube Rand(1,3)
            If 
rcube 1 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_1.jpg")
                
tmp\idnum tmp\idnum+1
                tmp
\idget rcube
                WriteInt
(cubetmp,tmp\idget)
            EndIf
            If 
rcube 2 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_2.jpg")
                
tmp\idnum tmp\idnum+1
                tmp
\idget rcube
                WriteInt
(cubetmp,tmp\idget)
            EndIf
            If 
rcube 3 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_3.jpg")
                
tmp\idnum tmp\idnum+1
                tmp
\idget rcube
                WriteInt
(cubetmp,tmp\idget)
            EndIf
            
            
DrawBlock b\img,a*60,i*60
        Next
    Next
    DebugLog 
"Cubes Generated"
    
generate 1
    CloseFile sav
End 
Function 



Забыл заменить путь файла. :-)

Edmundosik 18.02.2018 23:18

Ответ: Как сделать такую игру
 
Появилась другая проблема :mad:

Когда я запускаю игра начинает потреблять много оперативной памяти

вот код.
PHP код:

Type block
    Field x
,y
    Field img
    Field id
    Field isclick
End Type

Type savetmp
    Field idget
,idnum,file,id
End Type

If FileType("data\temp\cubetmp.dat") = 1 Then DeleteFile("data\temp\cubetmp.dat") ; Удаляем Temp-файл если он есть

HidePointer

Graphics 800
,600,32,2
SetBuffer BackBuffer
()

Global 
rcube
Global generate

DrawCubes
()

While 
Not (KeyHit(1))
    
Rect MouseX(),MouseY(),16,16 Рисуем курсор
    UpdateCubes
()
    
Flip
    Cls 
Очищяем экран
Wend
DeleteFile
("data\temp\cubetmp.dat") ; Удаляем Temp-файл
End

Function DrawCubes() ; Рисуем игровое поле
    generate 
0
    tmp
.savetmp = New savetmp
    tmp
\idnum 0
    tmp
\idget 0
    tmp
\file WriteFile("data\temp\cubetmp.dat") ; Создаём Temp-файл
    
    
For 1 To 9
        SeedRnd MilliSecs
()
        For 
1 To 9
            rcube 
Rand(1,3)
            If 
rcube 1 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_1.jpg")
                
tmp\idnum tmp\idnum+1
                tmp
\idget rcube
                WriteInt
(tmp\file,tmp\idget)
            EndIf
            If 
rcube 2 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_2.jpg")
                
tmp\idnum tmp\idnum+1
                tmp
\idget rcube
                WriteInt
(tmp\file,tmp\idget)
            EndIf
            If 
rcube 3 Then
                b
.block = New block
                b
\img LoadImage("data\gfx\cube_3.jpg")
                
tmp\idnum tmp\idnum+1
                tmp
\idget rcube
                WriteInt
(tmp\file,tmp\idget)
            EndIf
            
            
DrawBlock b\img,a*60,i*60
        Next
    Next
    
    generate 
1
    
If generate 1 Then
        DebugLog 
"Cubes Generated"
        
CloseFile tmp\file
    
EndIf
End Function ; Делаем игровое поле

Function UpdateCubes() ; Обновляем игровое поле
    ltmp 
ReadFile ("data\temp\cubetmp.dat") ; Читаем Temp-файл
        
For 1 To 9
            
For 1 To 9
                tmp
.savetmp = New savetmp
                tmp
\id ReadInt(ltmp) ; Читаем переменую rcube из Temp-файла
                
If tmp\id 1 Then
                    b
.block = New block
                    b
\img LoadImage("data\gfx\cube_1.jpg")
                EndIf
                If 
tmp\id 2 Then
                    b
.block = New block
                    b
\img LoadImage("data\gfx\cube_2.jpg")
                EndIf
                If 
tmp\id 3 Then
                    b
.block = New block
                    b
\img LoadImage("data\gfx\cube_3.jpg")
                EndIf
                
                
DrawBlock b\img,a*60,i*60
            Next
        Next
    CloseFile ltmp 
;  Закрываем Temp-файл
End 
Function 


ABTOMAT 18.02.2018 23:36

Ответ: Как сделать такую игру
 
Скорее всего игра потребляет слишком много оперативной памяти потому что ты каждый раз при обновлении блоков делаешь LoadImage.

Т.е. с каждым новым отрисованным кадром одни и те же изображения загружаются в память и "жрут" её.

Загрузи все картинки один раз вначале. Внутри UpdateCubes нужно только отрисовывать уже заранее загруженные.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot