All pastes #46713 Raw Edit

Stuff

public cpp v1 · immutable
#46713 ·published 2006-03-23 17:57 UTC
rendered paste body
/* robots.c * ein einfaches Spiel, mit Text-Graphik realisiert ("rogue-like") * * * B.Glavina, 9.12.2005 (nur Programm-Rahmen) */#include <stdio.h>#include <string.h>#define bool int#define false 0#define true 1/* unsere Welt besteht aus einem Rechteck mit *//* Breite XRANGE und Hoehe YRANGE; links unten ist Zelle (0;0) */#define XRANGE 50#define YRANGE 24/* die Welt kann (nur) folgende Objekte enthalten: */#define EMPTY '.'#define WALL '#'#define ME '@'#define ROBOT 'R'#define JUNK 'X'void init_world(char world[XRANGE][YRANGE], int level)/* fuelle Welt mit Waenden und Robotern */{  int x, y;  for (x=0; x<XRANGE; x++)    for (y=0; y<YRANGE; y++)      world[x][y] = WALL;  for (x=1; x<XRANGE-1; x++)    for (y=1; y<YRANGE-1; y++)      world[x][y] = EMPTY;  switch (level)  {  case 0: /* test level */    world[5][5] = ROBOT;    world[10][5] = ROBOT;    break;  default: /* nothing */    break;  } /* end switch */}void show_world(char world[XRANGE][YRANGE]){  int x, y;for (y=0;y<YRANGE;y++){if (y!=YRANGE)//Damit am schluss keine Leerzeile erzeugt wirdprintf("\n");    for (x=0;x<XRANGE;x++)    {    printf("%c",world[x][y]);    }    }  printf("\n\n");//  printf("[[ hier soll das Spielfeld angezeigt werden ]]\n");  return;}void beep(void){  printf("\a");  return;}void move_robots(char world[XRANGE][YRANGE],                  int goal_x, int goal_y, int *n_rob){  printf("[[ jetzt ziehen die Roboter ... ]]\n");  *n_rob = 1; /* damit main nicht auf undefinierten Wert zugreift */  return;}void compute_random_free_cell(char w[XRANGE][YRANGE], int *x, int *y){int xempty;int yempty;srand( time(0));do {    xempty=(rand() % XRANGE + 1);    yempty=(rand() % YRANGE + 1);} while (w[xempty][yempty]!=EMPTY);*x=xempty;*y=yempty; }int main(void){  char world[XRANGE][YRANGE]; /* Spielfeld */  int me_x, me_y; /* Position des Spielers */  char commandline[10], command, msg[100];  int level;  bool alive, ok;  int number_of_robots;  int *x=0;  int *y=0;  int test;  srand(time(0));  test=(rand() % XRANGE + 1);    printf("Robots, ein geniales Produkt von Jan Knobloch\n");  printf("\n");  //printf("%d",test);  printf("Start-Level? ");  scanf("%d", &level);  init_world(world, level);  me_x = XRANGE/2; me_y = YRANGE/2;  world[me_x][me_y] = ME;  alive = true;  do  {    show_world(world);    printf("Now what? (h for help) >> ");    gets(commandline);    command = commandline[0];    ok = false;    switch (command)    {    case '2': /* go south */      if (world[me_x][me_y+1]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_y++;        world[me_x][me_y] = ME;        ok = true;      }      break;        case '4': /* go west */      if (world[me_x-1][me_y]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_x--;        world[me_x][me_y] = ME;        ok = true;      }      break;          case '6': /* go east */      if (world[me_x+1][me_y]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_x++;        world[me_x][me_y] = ME;        ok = true;      }      break;        case '8': /* go north */      if (world[me_x][me_y-1]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_y--;        world[me_x][me_y] = ME;        ok = true;      }          break;            case '7': /* go northwest */      if (world[me_x-1][me_y-1]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_y--;        me_x--;        world[me_x][me_y] = ME;        ok = true;      }          break;            case '9': /* go northeast */      if (world[me_x+1][me_y-1]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_y--;        me_x++;        world[me_x][me_y] = ME;        ok = true;      }          break;            case '1': /* go southwest */      if (world[me_x-1][me_y+1]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_y++;        me_x--;        world[me_x][me_y] = ME;        ok = true;      }          break;            case '3': /* go southeast */      if (world[me_x+1][me_y+1]==EMPTY)      {        world[me_x][me_y] = EMPTY;        me_y++;        me_x++;        world[me_x][me_y] = ME;        ok = true;      }      break;            case '5': /* dont move */      world[me_x][me_y] = ME;      ok = true;      break;               case '0': /* HyperSpace */      compute_random_free_cell(world[XRANGE][YRANGE], *x, *y);      world[me_x][me_y] = EMPTY;      //world[x][y] = ME;      ok = true;      break;             break;    case 'h': /* Hilfe: Erklaerung moeglicher Eingaben */      printf("\n");      printf("Moegliche Eingaben sind\n");      printf("x = Spiel abbrechen\n");      printf("[12345679h<space> ebenfalls erklaeren]\n");      printf("... usw.\n");      printf("\n");      printf("(RET druecken zum Weiterspielen)");      gets(commandline);      break;    case 'x': /* Abbruch */      alive = false;      strcpy(msg, "Hey, is there really anything better than ROBOTS???");      break;    default:      break;    } /* end switch */    if (ok)    {       move_robots(world, me_x, me_y, &number_of_robots);      if (world[me_x][me_y]!=ME)      {        alive = false; /* player is dead */        strcpy(msg, "Sorry, loser! Have more luck next time.");      }      else if (number_of_robots==0)      {        alive = false; /* player has won */        strcpy(msg, "Wow! You are a genuine robot buster.");      }    }    else       beep(); /* invalid command */  } while (alive);  show_world(world);  printf("\n");  printf("%s\n", msg);  printf("... exiting this exciting game ...\n");  printf("\n");  return 0;}/* end of file robots.c */