Sobes.tech
Back to questions
Senior
3

Как добавить поддержку игр с ограничением времени (3 или 5 минут) помимо игры без ограничений?

Companies where asked
Hi Rockits

Answer from AI

sobes.tech AI

Чтобы добавить поддержку игр с ограничением времени (например, 3 или 5 минут) в Go, можно использовать таймеры и контексты для контроля времени игры.

Основная идея:

  • При старте игры запускать таймер на заданное время.
  • По истечении времени автоматически завершать игру.
  • Для игры без ограничений таймер не запускается.

Пример реализации с использованием time.Timer и канала для остановки игры:

package main

import (
    "fmt"
    "time"
)

type Game struct {
    duration time.Duration // 0 для без ограничений
    done     chan bool
}

func NewGame(duration time.Duration) *Game {
    return &Game{
        duration: duration,
        done:     make(chan bool),
    }
}

func (g *Game) Start() {
    fmt.Println("Игра началась")
    if g.duration > 0 {
        timer := time.NewTimer(g.duration)
        go func() {
            <-timer.C
            fmt.Println("Время вышло! Игра окончена.")
            g.done <- true
        }()
    }
    // Логика игры здесь
}

func (g *Game) Wait() {
    if g.duration > 0 {
        <-g.done
    } else {
        // Игра без ограничений, можно ждать пользовательского события
    }
}

func main() {
    gameWithLimit := NewGame(3 * time.Minute)
    gameWithLimit.Start()
    gameWithLimit.Wait()

    gameWithoutLimit := NewGame(0)
    gameWithoutLimit.Start()
    // Для игры без ограничений можно реализовать другой механизм завершения
}

Таким образом, добавляя параметр времени, можно гибко управлять ограничениями по времени для разных типов игр.