Author Topic: Бросание кубика как в настольных играх  (Read 1281 times)

0 Members and 1 Guest are viewing this topic.

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 911
  • Reputation 36
  • Game making is my hobby for life!
Бросание кубика как в настольных играх
В примере показано как сделать бросание кубика как в настольных играх. Например, обычный (классический) кубик имеет 6 сторон, значит нужно сделать выбор случайного числа, от 1 до 6.

В настольных играх часто нужно бросать кубик(и), чтобы сделать ход. При этом
происходит выпадение случайного числа, например от 1 до 6, до 12 и т.п.
В этом примере показано как это делается, а также как сделать это со спрайтами,
иллюстрирующими стороны кубика.

Используется функция wRnd_range.

Спрайты для кубиков и шрифт прикреплены.
Пути в примере и заголовок "MyFunctions.bi" прописаны так, как если бы проект был сгенерирован Мастером (Wizard) как пустой проект 'ExtraExamples' и находится в папке /WS3D/MyProjects/ExtraExamples/
Соответственно спрайты нужно "кинуть" в папку /WS3D/MyProjects/ExtraExamples/media/sprites , а
шрифт в папку /WS3D/MyProjects/ExtraExamples/media/fonts (этот шрифт есть в папке WS3D/Media/Fonts в версии 0.9.2, но я его прикрепил сюда, если вы ещё пользуетесь более старой версией WS3D).

Code: [Select]
#include "MyFunctions.bi"
'' ----------------------------------------------------------------------------
'' Пример сделал Alec (WorldSim3D developer)
'' ----------------------------------------------------------------------------
'' Пример: Выбор случайного числа от 1 до 6
'' В настольных играх часто нужно бросать кубик(и), чтобы сделать ход. При этом
'' происходит выпадение случайного числа, например от 1 до 6, до 12 и т.п.
'' В этом примере показано как это делается, а также как сделать это со спрайтами,
'' иллюстрирующими стороны кубика.
'' ----------------------------------------------------------------------------

'' Includes for extension libraries
''#include "WorldSim3D.bi"

'' global variables

DIM dice (1 To 6) As wTexture  '6 текстур для 6 сторон кубика
DIM KeyEvent as wKEY_EVENT Ptr
Dim BitmapFont as wFont
Dim a As Integer               'значение выпавшего случайного числа
Dim b As Integer               'сторона кубика, соответствующая спрайту стороны кубика

' -----------------------------------------------------------------------------

wStart( wDT_OPENGL, 800, 600, wBITS_PER_PIXEL_32,_
          wWINDOWED, wNO_SHADOWS, wCAPTURE_EVENTS, wVERTICAL_SYNC_ON )

' Set the title of the display
wSetWindowCaption( "Пример: бросание кубика" )

BitmapFont = wGetFont ( "media/fonts/Cyr.xml" )

' загрузим сразу все 6 спрайтов - сторон кубика
For b = 1 To 6
dice(b) = wGetTexture( "media/sprites/dice" + Str(b) + ".png" )
Next
'
WHILE wRunning
    '
    wBeginScene( 15,15,10 )

     While wKeyEventAvailable
       KeyEvent = wReadKeyEvent
            select case as const KeyEvent->key
                case KEY_KEY_Q    'нажимаем Q
                if KeyEvent->direction = wKEY_DOWN Then
                    a = Int(wRnd_range (1.0,6.999999999999999)) 'генерируем случайное число от 1 до 6
                    'на самом деле сначала генерируется число от 1.0 до 6.999999999999999 (15 знаков)
                    'после плавающей точки. Затем отсекая дробную часть получаем целое число.
                    b = a 'сторона кубика для спрайта равна выпавшему числу
                End If
            wCloseKEY_ESC()
            End Select
     Wend
     
    wDraw2DImageElement( dice(b), 368, 268, 0, 0, 66, 66, wUSE_ALPHA ) 'показываем спрайт,
    'соответствующий значению кубика
     w2DFontDraw ( BitmapFont, "Выпало:  " + Str(a), 350, 70, 450, 90 )
     w2DFontDraw ( BitmapFont, "Нажимайте Q, чтобы бросить кубик", 250, 550, 350, 570 )
   
    wEndScene
    wSetFPS
    'wCloseESC()
WEND

' -----------------------------------------------------------------------------
' Stop the WorldSim3D engine and release resources
wStop
« Last Edit: February 02, 2015, 07:54:26 PM by Alec - WS3D Developer »
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 128
  • Reputation 11
Этого примера в стандартных, прилагаемых к движку, не нашла (если просмотрела, извините). Может его обновить для последней версии? А то без "MyFunctions.bi" не работает.
« Last Edit: May 06, 2015, 11:22:44 AM by Marsha »

Offline it_is_good

  • Friends
  • Baron (-ess)
  • *
  • Posts: 308
  • Reputation 13
  • I'm a newbie.
Marsha, этот пример создан с помощью Мастера. Мастер создаёт заготовку для проекта. Сам мастер находится по адресу WorldSim3D\Wizard. Проект (заготовка) создается в папке WorldSim3D\MyProjects
Внимательней прочитай первый пост

Offline Marsha

  • Friends
  • Knight
  • *
  • Posts: 128
  • Reputation 11
it_is_good, твоя правда  :) Всё работает. Хорошая штука, жаль только не настоящий кубик с физикой  :D

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 911
  • Reputation 36
  • Game making is my hobby for life!
Можно сделать и с физикой, напр., Newton. Как-нибудь сделаю, но может, кому-то самому будет интерсно сделать.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 889
  • Reputation 63
Quote
Можно сделать и с физикой, напр., Newton. Как-нибудь сделаю, но может, кому-то самому будет интерсно сделать.
Чуть подразберусь с другими проектами, тоже попробую сделать
Под лежачий камень мы всегда успеем...