Changeset d4b9d28 in mainline


Ignore:
Timestamp:
2009-06-23T18:33:17Z (15 years ago)
Author:
Jiri Svoboda <jirik.svoboda@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7b47fa2
Parents:
52e4f52
Message:

Tetris high-score table now persists across multiple Tetris executions (and also propagate between concurrently running instances). It is much more stupid than the original BSD implementation, but it works.

Location:
uspace/app/tetris
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/tetris/scores.c

    r52e4f52 rd4b9d28  
    197197}
    198198
     199int loadscores(void)
     200{
     201        FILE *f;
     202        size_t cnt;
     203        int rc;
     204
     205        f = fopen("/tetris.sco", "rb");
     206        if (f == NULL)
     207                return ENOENT;
     208
     209        cnt = fread(scores, sizeof(struct highscore), NUMSPOTS, f);
     210        rc = fclose(f);
     211
     212        if (cnt != NUMSPOTS || rc != 0)
     213                return EIO;
     214
     215        return EOK;
     216}
     217
     218void savescores(void)
     219{
     220        FILE *f;
     221        size_t cnt;
     222        int rc;
     223
     224        f = fopen("/tetris.sco", "wb");
     225        cnt = fwrite(scores, sizeof(struct highscore), NUMSPOTS, f);
     226        rc = fclose(f);
     227
     228        if (cnt != NUMSPOTS || rc != 0)
     229                printf("Error saving score table\n");
     230}
     231
    199232/** @}
    200233 */
  • uspace/app/tetris/scores.h

    r52e4f52 rd4b9d28  
    6565extern void initscores(void);
    6666extern void insertscore(int score, int level);
     67extern int loadscores(void);
     68extern void savescores(void);
    6769
    6870/** @}
  • uspace/app/tetris/tetris.c

    r52e4f52 rd4b9d28  
    5050#include <sys/types.h>
    5151#include <err.h>
     52#include <errno.h>
    5253#include <stdio.h>
    5354#include <stdlib.h>
     
    207208                                break;
    208209                        case 'h':
     210                                loadscores();
    209211                                showscores(firstgame);
    210212                                tetris_menu_draw(*level);
     
    298300       
    299301        scr_init();
    300         initscores();
     302        if (loadscores() != EOK)
     303                initscores();
     304
    301305        while (tetris_menu(&level)) {
    302306                fallrate = 1000000 / level;
     
    416420               
    417421                scr_clear();
     422                loadscores();
    418423                insertscore(score, level);
     424                savescores();
    419425                score = 0;
    420426        }
Note: See TracChangeset for help on using the changeset viewer.