Virtuelle Zockhalle 0.05 beta
Datenstrukturen | Makrodefinitionen | Typdefinitionen | Aufzählungen | Funktionen | Variablen

elements.h-Dateireferenz

Elemente eines Spielautomaten. Mehr ...

#include "alhelper.h"
#include "dirtrect.h"
#include <time.h>

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  variable_bitmap
 Variable Bitmap. Mehr ...
struct  counter
 Zählwerk. Mehr ...
struct  reel
 Walze. Mehr ...
struct  invisible_persistent
 Unsichtbarer persistenter Integer. Mehr ...
struct  stat_bigwin
 Ein registrierter Großgewinn. Mehr ...
struct  stat_part
 Teilstatistik. Mehr ...
struct  machine_stat
 Vollständige Statistik eines Spielgerätes. Mehr ...
struct  simstrat
 Simulationsstrategie. Mehr ...
struct  machine
 Spielgerät. Mehr ...
struct  sample_loop
 Gelooptes Sample. Mehr ...

Makrodefinitionen

#define BIGWIN_BUFSZ   (40)
 Größe des Buffers eines Beschreibungstextes.
#define BIGWIN_STORE   (40)
 Anzahl der geseicheicherten Großgewinne.
Hilfsmakros für das Blitten mit Offset.

Alle diese Makros sorgen für die Anpassung an XOF und YOF, was dem allgemeinen Trend zur Faulheit und Vergesslichkeit entgegenkommen sollte.

#define m_saverect(BM, X, Y)   drect_saverect ((BM), (X) + XOF, (Y) + YOF)
 Rechteck in Bitmap sichern.
#define m_blitfull(BM, X, Y)   drect_blitfull ((BM), (X) + XOF, (Y) + YOF)
 Bitmap vollständig blitten.
#define m_blit(BM, SX, SY, DX, DY, W, H)   drect_blit ((BM), (SX), (SY), (DX) + XOF, (DY) + YOF, (W), (H))
 Blitten.
#define m_sprite(BM, X, Y)   drect_sprite ((BM), (X) + XOF, (Y) + YOF)
 Sprite blitten.
#define m_stretch_sprite(BM, X, Y, W, H)   drect_sprite ((BM), (X) + XOF, (Y) + YOF, (W), (H))
 Sprite verzerrt blitten.
#define m_rle_sprite(RLE, X, Y)   drect_rle_sprite ((RLE), (X) + XOF, (Y) + YOF)
 RLE-Sprite blitten.
#define m_trans_rle_sprite(RLE, X, Y)   drect_trans_rle_sprite ((RLE), (X) + XOF, (Y) + YOF)
 Transparentes RLE-Sprite blitten.
#define m_text(FNT, STR, X, Y, FG, BG)   drect_text ((FNT), (STR), (X) + XOF, (Y) + YOF, FG, BG)
 Linksbündige Textausgabe.
#define m_ctext(FNT, STR, X, Y, FG, BG)   drect_ctext ((FNT), (STR), (X) + XOF, (Y) + YOF, FG, BG)
 Zentrierte Textausgabe.
#define m_rtext(FNT, STR, X, Y, FG, BG)   drect_rtext ((FNT), (STR), (X) + XOF, (Y) + YOF, FG, BG)
 Rechtsbündige Textausgabe.
#define m_drawbox(X, Y, W, H, C)   drect_drawbox ((X) + XOF, (Y) + YOF, W, H, C)
 Rechteckiger Rahmen.
#define m_fillbox(X, Y, W, H, C)   drect_fillbox ((X) + XOF, (Y) + YOF, W, H, C)
 Ausgefüllte rechteckige Box.

Typdefinitionen

typedef struct variable_bitmapvbitmap_t
 Variable Bitmap.
typedef struct machinemachine_t
 Zeiger auf ein Spielgerät.
Callbacktypen für die Programmsteuerung
typedef void(* prg_p0cb_t )(void)
 Callbackfunktion für das Programm.
typedef void(* prg_p1cb_t )(void *p1)
 Callbackfunktion für das Programm mit einem Parameter.
typedef void(* prg_p2cb_t )(void *p1, void *p2)
 Callbackfunktion für das Programm mit zwei Parametern.
typedef void(* prg_picb_t )(void *ptr, int i)
 Callbackfunktion für das Programm mit Pointer und Integer.

Aufzählungen

enum  {
  REELF_WEIGHTED = (1UL << 0), REELF_OWNRAND = (1UL << 1), REELF_INITED = (1UL << 7), REELF_IMPL = (1UL << 8),
  REELF_USER = (1UL << 16)
}
 

Flags für eine Walze.

Mehr ...
enum  {
  REEL_STOPPED = 0, REEL_STARTING = 1, REEL_RUNNING = 2, REEL_STOPPING = 3,
  REEL_HOLDED = 4, REEL_SPECIAL = 5, REEL_IMPL = 16, REEL_USER = 256
}
 

Walzenzustände.

Mehr ...
enum  {
  MFL_PLAYABLE = (1UL << 0), MFL_DEBUG = (1UL << 1), MFL_WANTPAYOUT = (1UL << 2), MFL_WANTQUIT = (1UL << 3),
  MFL_DONE = (1UL << 4), MFL_SIMULATED = (1UL << 5), MFL_CHEATED = (1UL << 6), MFL_FILEMISS = (1UL << 7),
  MFL_INITCHECK = (1UL << 8), MFL_USER = (1UL << 12)
}
 

Flags eines Spielgerätes.

Mehr ...
enum  {
  A_001 = (1UL << 1), A_002 = (1UL << 2), A_005 = (1UL << 3), A_010 = (1UL << 4),
  A_020 = (1UL << 5), A_050 = (1UL << 6), A_100 = (1UL << 7), A_200 = (1UL << 8),
  A_500 = (1UL << 9), A_EURO = (A_010 | A_020 | A_050 | A_100 | A_200), A_DEM = (A_010 | A_050 | A_100 | A_200 | A_500), A_NULL = 0
}
 

Flags für die Münzannahmebereitschaft.

Mehr ...
enum  { PREVIEW_W = 210, PREVIEW_H = 300 }
 

Größe eines Vorschaubildes.

Mehr ...

Funktionen

void register_bigwin (const char *fmt,...)
 Registrieren eines großen Gewinns.
void smploop_start (struct sample_loop *sl)
 Starten eines Sampleloops.
void smploop_stop (struct sample_loop *sl)
 Stoppen eines Sampleloops.
Schnittstelle zur Walze
void reel_set_random (struct reel *r)
 Zufällige Walzenposition setzen.
void reel_start (struct reel *r)
 Walze starten.
void reel_stop_ex (struct reel *r, int force)
 Walze stoppen.
unsigned reel_pos (const struct reel *r)
 Position der Walze ermitteln.
void reel_start_sound (struct reel *r)
 Samples für Walzenstart spielen.
void reel_stop_sound (struct reel *r)
 Samples für Walzenstop spielen.
void reel_stop (struct reel *r)
 Walze stoppen.
void reel_invisible_render_cb (struct reel *r, int force)
 Render-Callback für eine unsichtbare Walze.
Hilfsfunktionen
int m_all_files_exist (unsigned n, char **filenames)
 Existenz aller Dateien prüfen.
DATAFILE * m_load_datafile (remember_t rmb, const char *filename)
 DATAFILE aus dem Programmverzeichnis laden.
struct stat_bigwinm_bigwin_stats (const char *uniq_id)
 Großgewinnstatistiken für ein Gerät ermitteln.
struct stat_partm_overall_stats (const char *uniq_id)
 Langzeitstatistiken für ein Gerät ermitteln.
int m_machine_started (const char *uniq_id)
 Ermitteln, wie häufig ein Gerät gespielt wurde.
void m_cb_wantquit_setflag (machine_t md)
 Praktischer Callback für verzögertes Beenden.
void m_cb_format_dem (unsigned bufsz, char *buf, int value)
 Callback für die Formatierung von DM-Beträgen.
void m_cb_format_eur (unsigned bufsz, char *buf, int value)
 Callback für die Formatierung von Euro-Beträgen.
void m_cb_format_generic (unsigned bufsz, char *buf, int value)
 Callback für eine unspezifische Betragsformatierung.
void m_reel_positions (machine_t md,...)
 Ermitteln der Walzenpositionen.

Variablen

short int cheat_allowed
 Ist Cheaten erlaubt?
volatile unsigned hundreds
 Timer.
struct simstrat default_sim
 Standard-»Strategie«.

Rendering-Offsets

#define XOF   (elements_offset_x)
 Kurzschreibweise für elements_offset_x.
#define YOF   (elements_offset_y)
 Kurzschreibweise für elements_offset_y.
short int elements_offset_x
 x-Offset für das Rendern eines Elementes
short int elements_offset_y
 y-Offset für das Rendern eines Elementes

Hilfsfunktionen für das Rendering

#define clear_screen(COLOR)   drect_cls ((COLOR))
 Bildschirm löschen.
void draw_backdrop (BITMAP *bm)
 Hintergrundbild zeichnen.
void draw_machine_front (BITMAP *bm)
 Scheibe des Automaten zeichnen.

Schnittstelle zum Timer

#define timer_get()   (hundreds)
 Aktuellen Stand des Timers ermitteln.
#define random_future(MINTIME, MAXTIME)   (timer_get () + (MINTIME) + mt_range ((MAXTIME) - (MINTIME) + 1))
 Ermitteln eines zufälligen Zeitpunktes in der Zukunft.
#define random_time(MINTIME, MAXTIME)   ((MINTIME) + mt_range ((MAXTIME) - (MINTIME) + 1))
 Ermitteln eines zufälligen Zeitpunktes.
void timer_reset (void)
 Timer rücksetzen.
void timer_set (unsigned value)
 Timer auf neuen Wert setzen.
void timer_start (void)
 Timer starten.
void timer_pause (void)
 Timer vorrübergehend anhalten.
int timer_is_running (void)
 Läuft der Timer?

Schnittstelle der variablen Bitmap

#define vbm_get(VBM)   ((VBM)->akt)
 Status einer variablen Bitmap ermitteln.
#define vbm_getmax(VBM)   (assert ((VBM)), (VBM)->max)
 Maximalen Status einer variablen Bitmap ermitteln.
void vbm_set (vbitmap_t vbm, unsigned short int newval)
 Status einer variablen Bitmap setzen.
void vbm_sound (vbitmap_t vbm, unsigned short int newval, SAMPLE *smp, int vol, int pan)
 Status einer variablen Bitmap mit Sound setzen.

Schnittstelle zum Zählwerk

#define cnt_get(CNTPTR)   ((CNTPTR)->value)
 Zählerstand ermitteln.
#define cnt_set(CNTPTR, VAL)   (cnt_add ((CNTPTR), (VAL) - cnt_get ((CNTPTR))))
 Zählerstand setzen.
#define cnt_sub(CNTPTR, TOSUB)   (cnt_add ((CNTPTR), -(TOSUB)))
 Vom Zählwerk abziehen.
#define cnt_get_max(CNTPTR)   ((CNTPTR)->max)
 Maximalen Wert eines Zählwerkes ermitteln.
void cnt_add (struct counter *c, int toadd)
 Addition zum Zählwerk.
int cnt_is_counting (struct counter *c)
 Prüfung, ob der Zähler zählt.
void cnt_up_sound (struct counter *c)
 Sample für Aufzählung spielen.
void cnt_down_sound (struct counter *c)
 Sample für Abzug spielen.

Schnittstelle zum Spielgerät

#define machine_is_debug(MD)   (((MD)->flags & MFL_DEBUG) != 0)
 Test auf Debug-Version.
#define machine_is_simulated(MD)   (((MD)->flags & MFL_SIMULATED) != 0)
 Test auf Simulationslauf.
#define machine_plays_for_real(MD)   (((MD)->flags & MFL_SIMULATED) == 0)
 Test auf wirkliches Spielgeschehen.
#define machine_is_cheated(MD)   (((MD)->flags & MFL_CHEATED) != 0)
 Test auf gecheatetess Gerät.
#define machine_want_payout(MD)   (((MD)->flags & MFL_WANTPAYOUT) != 0)
 Test, ob das Gerät eine Auszahlung wünscht.
#define machine_is_quitting(MD)   (((MD)->flags & (MFL_WANTQUIT | MFL_DONE)) != 0)
 Soll die Maschine beendet werden.
#define machine_credit_add(M, ADD)   (cnt_add ((M)->credit_counter, (ADD)))
 Aufzählung auf den Credit-Zähler.
#define machine_credit_sub(M, SUB)   (machine_credit_add ((M), -(SUB)))
 Abzug vom Credit-Zähler.
#define machine_coinin(M, CIN)   (cnt_add ((M)->credit_counter, (CIN)))
 Geldeinwurf.
#define machine_credit(M)   ((M)->credit_counter->value)
 Stand des Credit-Zählers ermitteln.
#define machine_payout(M)   (machine_payout_ex ((M), machine_credit (M)))
 Auszahlung des Gesamtbetrages.
#define machine_payout_remain(M, REMAIN)
 Auszahlung mit Restbetrag.
void machine_precheck (machine_t md)
 Initiale Überprüfung eines Spielgerätes.
struct machine_statmachine_play (machine_t md)
 Gerät spielen.
struct stat_partmachine_simulate (machine_t md, struct simstrat *strat, unsigned n, int(*sim_cb)(unsigned n, int win))
 Gerät simulieren.
void machine_bet (machine_t md, unsigned bet)
 Einsatz machen.
void machine_wincheck (machine_t md)
 Gewinnprüfung.
void machine_quit_check (machine_t md)
 Beenden-Prüfung für ein Gerät.
void machine_start_action (machine_t md)
 Aktionen zum Spielstart.
void machine_end_action (machine_t md)
 Aktionen zum Spielende.
void machine_payout_ex (machine_t md, int amount)
 Auszahlung eines Betrages.

Schnittstelle zur Programmsteuerung

Das Programm besteht aus Angaben, zu welchen Zeitpunkten welche Callback-Funktionen aufgerufen werden sollen.Diese Aufrufe müssen von der Implementation eines Gerätes gesetzt werden, sie werden im Framework automatisch durchgeführt.Während der Ausführung einer Callbackfunktion können weitere Callbackfunktionen im Programm gesetzt werden, auch solche, die in der Vergangenheit liegen. Diese werden erst nach dem nächsten Rendern des Gerätes aufgerufen. Es ist also möglich (und in der Implementation eines Gerätes in der Regel auch erwünscht), dass zum Ende eines Spielablaufes zunächst die Aktionen für den Start eines neuen Spieles gesetzt werden und dann der Timer zurückgesetzt wird, ohne dass es zum sofortigen Aufruf der »überfälligen« Callbacks kommt.Wenn die Endaktionen eines Automaten über prg_endgame_action() gesetzt werden, denn wird der Timer automatisch nach dem Aufruf des Callbacks für das Gerät zurückgesetzt.
#define prg_reset_timer(WHEN)   prg_add ((WHEN), reset_timer)
 Programmanweisung zum Rücksetzen des Zählers.
#define prg_start_reel(WHEN, REEL)   prg_add_1param ((WHEN), (prg_p1cb_t) reel_start, (REEL))
 Programmanweisung zum Starten einer Walze.
#define prg_stop_reel(WHEN, REEL)   prg_add_1param ((WHEN), (prg_p1cb_t) reel_stop, (REEL))
 Programmanweisung zum Stoppen einer Walze.
#define prg_vbm_set(WHEN, VBM, NEWVAL)   prg_add_piparam ((WHEN), (prg_picb_t) vbm_set, (VBM), (NEWVAL))
 Programmanweisung zum Setzen einer variablen Bitmap.
#define prg_smploop_start(WHEN, SMPLOOP)   prg_add_1param ((WHEN), (prg_p1cb_t) smploop_start, (SMPLOOP))
 Programmanweisung zum Starten eines Sampleloops.
#define prg_smploop_stop(WHEN, SMPLOOP)   prg_add_1param ((WHEN), (prg_p1cb_t) smploop_stop, (SMPLOOP))
 Programmanweisung zum Beenden eines Sampleloops.
#define prg_startgame_loop(WHEN, MD)
 Programmsteuerung für die Wiederholung der Startaktion eines Spieles.
#define prg_quitcheck(WHEN, MD)   prg_add_1param ((WHEN), (prg_p1cb_t) machine_quitcheck, (MD))
 Programmanweisung für eine Beenden-Prüfung.
#define prg_wincheck(WHEN, MD)   prg_add_1param ((WHEN), (prg_p1cb_t) machine_wincheck, (MD))
 Programmanweisung für eine Gewinn-Prüfung.
void prg_clear (void)
 Programm löschen.
void prg_add (unsigned time_when, prg_p0cb_t cb)
 Callbackfunktion registrieren.
void prg_add_1param (unsigned time_when, prg_p1cb_t cb, void *p1)
 Callbackfunktion registrieren.
void prg_add_2param (unsigned time_when, prg_p2cb_t cb, void *p1, void *p2)
 Callbackfunktion registrieren.
void prg_add_piparam (unsigned time_when, prg_picb_t cb, void *ptr, int i)
 Callbackfunktion registrieren.
void prg_endgame_action (unsigned when, machine_t md)
 Programmanweisung für die Endaktionen eines Spieles.
void prg_default_bet (unsigned when, machine_t md)
 Programmanweisung für den Abzug des Standardeinsatzes.
void prg_bet (unsigned when, machine_t md, int amount)
 Programmanweisung für einen beliebigen Einsatz.
void prg_startgame_action (unsigned when, machine_t md)
 Programmanweisung für den Start eines Spieles.

Ausführliche Beschreibung

Elemente eines Spielautomaten.

In dieser überlangen Datei sind alle Elemente definiert, die in einem Spielgerät Verwendung finden, zusammen mit nützlichen Hilfsfunktionen.

Definiert in Datei elements.h.