Karel the Robot – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Karel the Robot – C / C++ – Fórum – Programujte.comKarel the Robot – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Atheo+4
Stálý člen
27. 7. 2012   #1
-
0
-

Zdravim zkousim si delat Karla (doufam ze kazdy zna) nicmene zadrhnul jsem se u pokladani cihlicek protoze vlastne ten muj objekt (Karlik:D) jezdi po tom poli pomoci prikazu a potreboval bych aby po prikazu ... "poloz" polozil na svoji pozici XY znak "219" = █ alias cihla:D no fajn to bych zvladnul ale tu je ten problem kdyz to polozim tak vlastne je tam znak █ ale kdyz tim karlem pres nej zase prejedu  tak zmizi a putne se na nej zase znak karla = ◄ a ta cihla mi zmizi.. potreboval bych ji tam dat nejak na trvalo ... prikladam zdrojovy kod karla doufam ze me neukamenujete jak mam vse spatne :D + pokud by jste meli nejake vylepseni nebo vidite co mam vse spatne prosim napiste mi to rad se poucim :) 

zdrojovy kod ->

/* Hlavnickove soubory */
#include <stdio.h>
#include "funkce.h"


#define POLOZKY 4 /* Pocet polozek v menu */
#define RADKY 24 /* Pocet radku v poli */
#define SLOUPCE 80 /* Pocet sloupecku v poli */

int i,j;  /* Ridici promenne cyklu */

/* Funkce */
void menu(void);
void vypis_menu(int pozice);
void HlavaMenu(void);
void start(void);
void info(void);
void prikazy(void);
void vykresli_ramecek(void);


int karel_left = 42,karel_top = 22;

char prikaz[0];
int i;


int main(void)
{
    int karel = 16;
    menu();
    return 0;
}

void menu(void)
{
  HlavaMenu();
  int pozice = 1;
  vypis_menu(1);
  while(1)
  {
    if (kbhit())
    {
      int key;
      key = MyGetch();
      if (key) {
        switch (key) {
          case 27:   /* Escape */
            exit(0);
            break;
          case 328:  /* Sipka nahoru */
            if (pozice > 1) pozice--;
            else pozice = POLOZKY;
            break;
          case 336:  /* Sipka dolu */
            if (pozice < POLOZKY) pozice++;
            else pozice = 1;
            break;
          case 13:   /* Enter */
            switch (pozice)
            {
              case 1: start();
                      break;
              case 2: info();
                      break;
              case 3: prikazy();
                      exit(0);
              case 4: vymaz();
                      exit(0);
            }
          default:
            continue;
        }
      }
      vypis_menu(pozice);
    }
  }
}

void vypis_menu(int pozice)
{   /* Pole polozek */
  char *polozky[] = {"Start", "Info","Prikazy", "Konec"};
    /* For cyklus pro vypsani polozek */
  for(i = 0; i < POLOZKY; i++)
  {
    gotoxy(35,10+i+i);
    if ((i+1)==pozice) barva(3); else barva(0);
    printf("%s\n",polozky[i]);
  }
}

void HlavaMenu(void)
{
  vymaz();
  gotoxy(27,1);
  barva(3);
  printf("K A R E L  T H E  R O B O T");

}

void start(void)
{
    char prikaz[0];
    int karel = 16;
    system("cls");
    vykresli_ramecek();
    int i; /* promenna cyklu */
    for(i=0;i<500;i++)
    {
        if(karel_left == 40) /* pokud se karel dotyka leve zdi neprojde dal */
        {
            karel_left += 1;
        }
        else if(karel_top == 0) /* pokud se karel dotyka horni zdi neprojde dal */
        {
            karel_top += 1;
        }
        else if(karel_top == 24) /* pokud se karel dotyka spodni zdi neprojde dal */
        {
            karel_top -= 1;
        }
        else if(karel_left == 79)/* pokud se karel dotyka prave zdi neprojde dal */
        {
            karel_left -= 1;
        }


        barva(3);
        gotoxy(karel_left,karel_top);
        putc(karel, stdout);
        gotoxy(2,2);
        printf("zadej prikaz :");
        scanf("%s", &prikaz);

        if(!strcmp("vpravo",prikaz))
        {
            if(karel == 16)
            {
                karel += 15;
            }
            else if(karel == 31)
            {
                karel -= 14;
            }
            else if(karel == 17)
            {
                karel += 13;
            }
            else if(karel == 30)
            {
                karel -= 14;
            }
        }
        else if(!strcmp("vlevo",prikaz))
        {
            if(karel == 16)
            {
                karel += 14;
            }
            else if(karel == 30)
            {
                karel -= 13;
            }
            else if(karel == 17)
            {
                karel += 14;
            }
            else if(karel == 31)
            {
                karel -= 15;
            }
        }
        else if(!strcmp("krok",prikaz))
        {

            if(karel == 16)
            {

                karel_left += 1;
                gotoxy(karel_left-1,karel_top);
                barva(-1);
                putc(219,stdout);
            }
            else if(karel == 30)
            {
                karel_top -= 1;
                gotoxy(karel_left,karel_top+1);
                barva(-1);
                putc(219,stdout);
            }
            else if(karel == 17)
            {
                karel_left -= 1;
                gotoxy(karel_left+1,karel_top);
                barva(-1);
                putc(219,stdout);
            }
            else if(karel == 31)
            {
                karel_top += 1;
                gotoxy(karel_left,karel_top-1);
                barva(-1);
                putc(219,stdout);
            }
        }
        else if(!strcmp("konec",prikaz))
        {
            getchar();
            menu();
        }

    }

    }


void info()
{
    HlavaMenu();
    gotoxy(0,5);
    barva(3);
    printf("Info :\n\n");
    printf("Autor : ");
    barva(0);
    printf("Tomas ....\n");
    barva(3);
    printf("Datum : ");
    barva(0);
    printf("27.07.2012\n");
    barva(3);
    printf("Komp. : ");
    barva(0);
    printf("CodeBlocks\n");
    barva(3);
    printf("Jazyk : ");
    barva(0);
    printf("Programovaci jazyk C\n\n");
    barva(3);
    printf("O Karlovi : \n\n");
    barva(0);
    printf("Karel predstavuje robota,ktery se pohybuje ve svem meste a vykonava prikazy,\nstavi zdi a nebo se jen tak prochazi od zdi ke zdi:).");
    getchar();
    menu();
}
void prikazy(void)
{

    HlavaMenu();
    gotoxy(0,5);
    barva(3);
    printf("Karel ovlada nasledujici prikazy: \n\n");
    barva(3);
    printf("Prikaz : ");
    barva(0);
    printf("vpravo [Otoci robota vpravo!]       \n");
    barva(3);
    printf("Prikaz : ");
    barva(0);
    printf("vlevo  [Otoci robota vlevo!]        \n");
    barva(3);
    printf("Prikaz : ");
    barva(0);
    printf("krok   [Udela krok v pred!]         \n");
    barva(3);
    printf("Prikaz : ");
    barva(0);
    printf("poloz  [Polozi cihlu!]              [Zatim nefunkcni!]\n");
    barva(3);
    printf("Prikaz : ");
    barva(0);
    printf("konec  [Vrati te do hlavniho menu!] \n");
    getchar();
    menu();
}
vykresli_ramecek(void)
{

    for(i=0; i<SLOUPCE;i++)
    {
        barva(1);
        gotoxy(i,0);
        putc('#', stdout);
    }
    for(i=0; i<SLOUPCE;i++)
    {
        gotoxy(i,RADKY);
        putc('#', stdout);
    }
    for(j=0;j<RADKY;j++)
    {
        gotoxy(0,j);
        putc('#', stdout);
    }
    for(j=0;j<RADKY;j++)
    {
        gotoxy(79,j);
        putc('#', stdout);
    }
    for(i=0; i<RADKY;i++)
    {
        gotoxy(40,i);
        putc('#', stdout);
    }
}
Nahlásit jako SPAM
IP: 188.175.140.–
TheOndrap+2
Super člen
27. 7. 2012   #2
-
0
-

Promin, zdroják sem nečetl, napadá mě, že musíš předtím zjistit, co tam je (třeba si pozice těch objektů (cihel) někam ukládat) a až z pozice robot zase zmizí tak to překreslit

Nahlásit jako SPAM
IP: 88.102.250.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
Mutagen0
Super člen
28. 7. 2012   #3
-
0
-

Mě zase napadá udělat si nějaký pole značka ... Do toho zapisovat postupně souřadnice zda položíš cihlu a při každým vykreslování projet i tohle pole a na souřadnice co by byly v tom poli tak na ně vykreslit objekty ... taky jsem to takhle nějak řešil když jsem programoval Karla (Kterýho samozřejmě ještě nemám hotovýho :D)

takže zkráceně : Vytvoř pole, při každým položení cihly do ní zapiš souřadnice a při kroku projeď pole a vykresli z ní na souřadnice cihlu.

Nahlásit jako SPAM
IP: 89.190.90.–
Tom
~ Anonymní uživatel
434 příspěvků
29. 7. 2012   #4
-
0
-

presne jak je popsano vyse...ja bych jen doplnil, ze cela logika by mohla vypada takto:

- vykresli hole hraci pole (proste pozadi se stenama, pokud mas)

- projdi pole cihel a vykresli cihly

- vykresli karla

- cekej na input od usera

a to cele v nejake "nekonecne" smycce

Nahlásit jako SPAM
IP: 89.102.36.–
TheOndrap+2
Super člen
29. 7. 2012   #5
-
0
-

#3 Mutagen
Mohl bych se zeptat v čem je to jiné než to co sem psal?

Nahlásit jako SPAM
IP: 88.102.250.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 81 hostů

Podobná vlákna

Karel the robot — založil ladislaf

Robot — založil jurec

Robot — založil jurec

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý