Author Topic: Покупка и продажа чего-нибудь  (Read 712 times)

0 Members and 1 Guest are viewing this topic.

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 932
  • Reputation 36
  • Game making is my hobby for life!
Покупка и продажа чего-нибудь
« on: December 10, 2014, 06:01:29 PM »
Как сделать покупку или/и продажу чего-нибудь?

Во многих играх игрок может или даже должен что-то покупать или продавать. Например, во многих космических играх игрок, пилот корабля, должен покупать топливо, оборудование для корабля и другое. Или он может покупать товар для продажи в другой системе, в общем торговать и получать прибыль.
В многих играх, чтобы сделать апгрейд, нужно покупать. В экономических симуляторах это вообще главная фича. Как правило это нужно делать в стратегиях. Иногда даже в казуалках.

В общем в примере показан основной алгоритм, как это делать.
Его можно легко изменить для нужд своей игры: ввести несколько видов товара, сделать разные цены для покупки и для продажи или даже сделать (с помощью случайных чисел) так, чтобы каждый раз, когда игрок входит в "магазин", цены немного "скакали", в общем всё что нужно для вашей игры.

Пример снабжён хорошими комментариями. Что непонятно спрашивайте, если знаю, отвечу.
Code: [Select]
'' ----------------------------------------------------------------------------
'' Пример сделал Alec (WorldSim3D developer)
'' ----------------------------------------------------------------------------
'' Пример: Покупка/продажа чего-нибудь
'' У игрока есть возможность покупать что-то у кого-то, если у него достаточно денег.
'' Также он может продать свой товар, чтобы заработать денег
'' Можно установить цену на товар, наличие денег, т.е. сколько их у игрока и сколько товара в наличии
'' ----------------------------------------------------------------------------

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

'' global variables
'
Dim goods As Integer = 0     'сколько товара в наличии (кг, тонн, шт. и т.п.)
Dim money As Integer = 1000  'сколько денег
Dim price As integer = 120   'какова цена товара за одну единицу (за шт., кг. и т.п.)
Dim message As String = ""   'сообщение: недостаточно денег для покупки товара
Dim message_2 As String = "" 'сообщение: недостаточно товара для продажи

' WorldSim3D objects
Dim BitmapFont as wFont
DIM KeyEvent as wKEY_EVENT PTR

' -----------------------------------------------------------------------------
' start the WorldSim3D interface
wStart( wDT_OPENGL, 800, 600, wBITS_PER_PIXEL_32,_
          wWINDOWED, wNO_SHADOWS, wCAPTURE_EVENTS,_
          wVERTICAL_SYNC_ON )
wSetWindowCaption( "Example: Buy and sell goods" )

BitmapFont = wGetFont ( "../media/Fonts/3.png" )

' -----------------------------------------------------------------------------
' while the WorldSim3D environment is still running
WHILE wRunning
    ' begin the scene, erasing the canvas with grey before rendering
    wBeginScene( 15,25,15 )
   
    ' сообщения:
    w2DFontDraw ( BitmapFont, "Money: " + Str(money), 325, 10, 400, 25 ) 'сколько у игрока денег
    w2DFontDraw ( BitmapFont, "Price:  " + Str(price), 325, 30, 400, 45 )'цена товара за 1 единицу
    w2DFontDraw ( BitmapFont, "Goods: " + Str(goods), 325, 50, 400, 65 ) 'количество товара для продажи
    w2DFontDraw ( BitmapFont, message, 250, 90, 400, 105 )                'недостаточно денег для покупки товара
    w2DFontDraw ( BitmapFont, message_2, 250, 90, 400, 105 )             'недостаточно товара для продажи
   
    ' сообщение внизу экрана: "Нажмимайте 1, чтобы покупать и 2, чтобы продавать"
    w2DFontDraw ( BitmapFont, "Press '1' for buying and '2' for selling", 200, 570, 400, 585 )
   
    If goods > 0 Then message_2 = ""         'если товара для продажи (стало) больше нуля, то
    ' убираем сообщение о том, что его не было в наличии
    If money - price >=  0 Then message = "" 'если денег на покупку одной единицы
    ' товара - достаточно, то убираем сообщение о том, что денег не хватало
   
    While wKeyEventAvailable
            KeyEvent = wReadKeyEvent
            '
            select case as const KeyEvent->key
            ' Покупка товара
            case KEY_KEY_1     ' клавиша 1
                ' если клавиша будет нажата
                if KeyEvent->direction = wKEY_DOWN Then
                ' Проверяем условие: если имеющиеся деньги минус цена товара
                ' за единицу больше или равно нулю, то
                    If money - price >= 0 Then
                    ' совершаем покупку - отниманием от денег цену товара за 1 единицу
                    money = money - price
                    ' при этом количество товара у игрока увеличивается на единицу
                    goods=goods+1
                    ' сообщение о нехватке денег не выводится, пока их не станет меньше нуля
                    message = ""
                    ' если же денег станет меньше нуля, то выводим соответствующее сообщение
                    Else message = "You have not enough money"
                    EndIf
                endif
    ' Продажа товара
            case KEY_KEY_2     ' клавиша 2
            if KeyEvent->direction = wKEY_DOWN Then
            ' Проверяем условие: если имеющиеся деньги плюс цена товара
                ' за единицу больше или равно нулю, то
                    If goods > 0 Then
                    ' совершаем продажу - добавляем к деньгам цену товара за 1 единицу
                    money = money + price
                    ' при этом количество товара у игрока уменьшается на единицу
                    goods=goods-1
                    ' сообщение о нехватке товара не выводится, пока его не станет меньше нуля
                    message_2 = ""
                    ' если же товара станет меньше нуля, то выводим соответствующее сообщение
                    Else message_2 = "You have no goods to sell"
                    EndIf
            EndIf
            wCloseKEY_ESC()
            End Select
    Wend

    wEndScene

    wSetFPS
Wend

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