Piškvorky v C

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
iMohos
Level 3.5
Level 3.5
Příspěvky: 745
Registrován: prosinec 07
Bydliště: Praha 8
Pohlaví: Muž
Stav:
Offline
Kontakt:

Piškvorky v C

Příspěvekod iMohos » 02 kvě 2011 13:13

Zdravím,mam problem s programem v Ccku . Mam ve škole zadanou úlohu vytvořit hru piškvorky aby se dala hrát v terminálu,takže o vzhled mi nejde.
Kdyby mi někdo alespon poradil,klidně bych za to i zaplatil :D

Mockrát děkuji za případné návrhy,prog. jazyk je tedy C ,a jestli je to důležité,systém je Linux ,distribuce Debian.
MB:ASUS M4A77TD | CPU : AMD Phenom II X4 3,2GHz@4,12 + Noctua NH-D14 |GK : MSI GTX560Ti TwinFrozrII OC @925/2100/1850 | RAM : 2x2GB DDR3 Zeppelin 1300MHz + 2x2GB OCZ LV 1300MHz | HDD : SSD OCZ Vexter4 120GB + Segate Barracuda 7200.12 500GB + WD AASD 500GB | PwR : OCZ Fatal1ty 550W | Case : Fractal Define R3

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Piškvorky v C

Příspěvekod faraon » 02 kvě 2011 16:07

Jsou k tomu úkolu nějaké bližší požadavky?
Například použítí ncurses nebo ansi kódů pro ovládání obrazovky, nebo stačí jen aby se jednotlivé stavy vypisovaly za sebou?
Má to být pro dva hráče, nebo člověk proti počítači?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
iMohos
Level 3.5
Level 3.5
Příspěvky: 745
Registrován: prosinec 07
Bydliště: Praha 8
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Piškvorky v C

Příspěvekod iMohos » 02 kvě 2011 17:11

Bližší požadavky k tomu nejsou, ale zase příliš složité to být nemusí.
MB:ASUS M4A77TD | CPU : AMD Phenom II X4 3,2GHz@4,12 + Noctua NH-D14 |GK : MSI GTX560Ti TwinFrozrII OC @925/2100/1850 | RAM : 2x2GB DDR3 Zeppelin 1300MHz + 2x2GB OCZ LV 1300MHz | HDD : SSD OCZ Vexter4 120GB + Segate Barracuda 7200.12 500GB + WD AASD 500GB | PwR : OCZ Fatal1ty 550W | Case : Fractal Define R3

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Piškvorky v C

Příspěvekod faraon » 02 kvě 2011 17:58

Když nic složitého, tak bych to udělal třeba takhle:

Kód: Vybrat vše

    0   1   2   3   4   5   6   7   8   9
  +---+---+---+---+---+---+---+---+---+---+
A |   |   |   |   |   |   |   |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+
B |   |   |   |   |   |   |   |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+
C |   |   |   | X |   |   |   |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+
D |   |   | X | O | O | O | X |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+
E |   | X |   |   |   |   | O |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+
F |   |   |   |   |   |   |   | O |   |   |
  +---+---+---+---+---+---+---+---+---+---+
G |   |   |   |   |   |   |   |   | X |   |
  +---+---+---+---+---+---+---+---+---+---+
H |   |   |   |   |   |   |   |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+
I |   |   |   |   |   |   |   |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+
J |   |   |   |   |   |   |   |   |   |   |
  +---+---+---+---+---+---+---+---+---+---+

Na tahu je Kolečko (zadej souřadnice pro O): g6_


Umíš aspoň něco v Pascalu? Z toho se dá v Céčku slušně vyjít. Stačí for, if, dvourozměrné pole, vstup a výstup. A hodilo by se mít po ruce učebnici Céčka ;-) Dokdy to máš mít hotové?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
iMohos
Level 3.5
Level 3.5
Příspěvky: 745
Registrován: prosinec 07
Bydliště: Praha 8
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Piškvorky v C

Příspěvekod iMohos » 02 kvě 2011 18:26

no takhle by to bylo nejluxusnější :) No,bohužel,jelikož jsme na naší průmyslovce 1.IT třída co kdy byla otevřená tak učební plány jsou dosti mizerné,jediné co jsme se kdy učili jsou základy PHP ,trochu bash a tedka C :( ... a hotové to má být přibližně do 2 týdnů ...
MB:ASUS M4A77TD | CPU : AMD Phenom II X4 3,2GHz@4,12 + Noctua NH-D14 |GK : MSI GTX560Ti TwinFrozrII OC @925/2100/1850 | RAM : 2x2GB DDR3 Zeppelin 1300MHz + 2x2GB OCZ LV 1300MHz | HDD : SSD OCZ Vexter4 120GB + Segate Barracuda 7200.12 500GB + WD AASD 500GB | PwR : OCZ Fatal1ty 550W | Case : Fractal Define R3

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Piškvorky v C

Příspěvekod faraon » 02 kvě 2011 20:49

PHP používá Céčkovou syntaxi a převzalo z něj hromadu věcí, takže v tom bych problém neviděl. Ale i tak je ten váš učební plán dost odvážný :-D
Tak se zatím mrkni na funkce scanf a printf, a pro začátek si zkusíme zadání jmen hráčů. A také si zkus navrhnout osnovu programu, co má postupně všechno dělat.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
iMohos
Level 3.5
Level 3.5
Příspěvky: 745
Registrován: prosinec 07
Bydliště: Praha 8
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Piškvorky v C

Příspěvekod iMohos » 03 kvě 2011 14:37

Je to učební plán na pytel,už ve třetáku,za rok maturita a pořád umim dá se říct kulový co se týče programování :D printf jaksi zvádám,na scanf se mrknu :)
MB:ASUS M4A77TD | CPU : AMD Phenom II X4 3,2GHz@4,12 + Noctua NH-D14 |GK : MSI GTX560Ti TwinFrozrII OC @925/2100/1850 | RAM : 2x2GB DDR3 Zeppelin 1300MHz + 2x2GB OCZ LV 1300MHz | HDD : SSD OCZ Vexter4 120GB + Segate Barracuda 7200.12 500GB + WD AASD 500GB | PwR : OCZ Fatal1ty 550W | Case : Fractal Define R3

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Piškvorky v C

Příspěvekod faraon » 03 kvě 2011 22:53

Za rok se dá naučit spousta věcí :listen: Také záleží jak hluboko do toho vůbec máte proniknout, co to máš za obor?
Moc do hloubky ten scanf() ještě nestuduj, zatím stačí když budeš chápat proč je printf("%d",cislo) a scanf("%d",&cislo), a k čemu je tam to &.
A jak jsi na tom s tou osnovou, už sis sepsal jak ta hra probíhá?
Jinak Céčko je v principu strašně jednoduchý jazyk, má jen deset příkazů :lol: Jak to zatím vidím já, tak je ale ani nebudeme potřebovat všechny.

Protože piškvorky moc neumím, tak trochu jsem zapátral a našel tohle:

* Piškvorky proti sobě hrají dva hráči.
* K dispozici mají čtverečkované hrací pole o rozměrech 15 × 10 čtverečků.
* Každý z hráčů má svůj symbol (křížek, nebo kolečko).
* Zakreslováním svého symbolu do některého ze čtverečků hracího pole se snaží poskládat souvislou řadu pěti svých symbolů.
* Zároveň také samozřejmě zabraňuje svému soupeři v tomtéž.
* Vyhrává ten hráč, kterému se podaří dříve poskládat nejméně pět svých symbolů do svislé, vodorovné nebo diagonální souvislé řady.

a oficiální pravidla české federace (ale hrají to podle japonských):

* Piškvorky je hra pro dva hráče. Hráči kladou na hrací plán černé a bílé kameny.
* Deska má 15 svislých a 15 vodorovných čar s 225 průsečíky. Pět z těchto průsečíků slouží jako referenční body. Desky nesmí mít stejnou barvu jako kameny.
* Jeden z hráčů používá černé, druhý bílé kameny. Hráči se střídají v tazích. Černý (tj. hráč s černými kameny) začíná; položí svůj první kámen na libovolný průsečík desky.
* Vítězem hry se stává hráč, který první vytvoří piškvorku, tj. právě pět stejných kamenů v řadě. V případě vytvoření šesti a více kamenů v řadě hra pokračuje dále.
* Hráč vyhraje, když může prokázat, že jeho soupeř překročil časový limit.
* Hráč vyhraje, pokud jeho soupeř vzdal.
* Pokud hráč vytvoří piškvorku, ale nevšimne si toho a o svoji výhru se nepřihlásí, hra pokračuje a vyhrává soupeř, přihlásí-li se o svoji výhru.
* Hra končí remízou,
- když jsou obsazeny všechny průsečíky na desce;
- když se oba hráči na remíze dohodnou;
- když oba hráči překročili čas.

Pole 15x10 se na obrazovku v pohodě vejde, akorát by bylo lepší označit písmeny sloupce, aby se nemuselo zadávat dvoumístné číslo...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
iMohos
Level 3.5
Level 3.5
Příspěvky: 745
Registrován: prosinec 07
Bydliště: Praha 8
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Piškvorky v C

Příspěvekod iMohos » 30 kvě 2011 14:42

Tedy nějaký plán jak by to mělo probíhat:

- defaultně nějaká hrací plocha,řekněme cca 8x8
- hráči by se postupně střídali
- hra by tedy probíhala tak,že každé hrací políčko v poli by mělo svojí pevnou souřadnici,XY,takže hráč který hraje za křížek by musel napsat řekněme napříkal C4,hráč za kolečka B7 a takhle
- po volbě (resp. zadání souřadnic) by se hrací políčko zaplnilo příslušným znakem X nebo O
- po tom co by některý z hráčů dosáhl 4 svých symbolů v řadě (at už uhlopříčně nebo diagonálně) by se na obrazovce oběvil nápis "vyhrál X" nebo "vyhrál O" ,něco v tom smyslu :D

šlo by to takhle ? :smile: samozřejmě by to nebylo zadarmo :D
MB:ASUS M4A77TD | CPU : AMD Phenom II X4 3,2GHz@4,12 + Noctua NH-D14 |GK : MSI GTX560Ti TwinFrozrII OC @925/2100/1850 | RAM : 2x2GB DDR3 Zeppelin 1300MHz + 2x2GB OCZ LV 1300MHz | HDD : SSD OCZ Vexter4 120GB + Segate Barracuda 7200.12 500GB + WD AASD 500GB | PwR : OCZ Fatal1ty 550W | Case : Fractal Define R3

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Piškvorky v C

Příspěvekod faraon » 30 kvě 2011 18:18

Takže už máš nějakou představu jak to má probíhat, a tím je daný začátek programu:

Kód: Vybrat vše

#define SIRKA 8
#define VYSKA 8
#define PISKVORKA 4

char plocha[SIRKA][VYSKA],
     symbol[]={"OX"};


Základní hodnoty jsou definované jako konstanty, takže se dají kdykoliv změnit a tím se přizpůsobí celý program. Říká se, že jediná čísla, která se v zdrojovém kódu smí vyskytovat, jsou 0 a 1, a o tu jedničku se vedou spory :lol: Pro ladění bych doporučil nastavit 3,3,3, tím se hra z Piškvorek změní na Tic-Tac-Toe a mnohem snáz se vyzkouší všechny kombinace než při větší ploše. Hlavně rychleji, protože při ploše 8x8 by to mohlo trvat i pár miliard let...
Ještě si rozmysli jestli chceš mít tu hrací plochu jako globální proměnnou (jednodušší možnost), nebo jestli jí definuješ lokálně v main() a budeš funkcím předávat v parametrech (správnější ale pracnější).

V tuhle chvíli máme tři hlavní problémy:
1: funkce, která zobrazí hrací plochu na obrazovku, tedy písmena, čísla, rámečky a obsah jednotlivých polí,
2: funkce, která načte zadání hráče jenž je na řadě, zkontroluje jestli pole není obsazené a zapíše do něj jeho symbol,
3: hlavní smyčka a její podmíněné ukončení, jestli se bude nejvíc hodit for, while nebo do se ukáže časem, zatím je potřeba vědět jen podle čeho pozná že se má ukončit.

Od toho se budou odvíjet všechny proměnné (ostatní už budou int) a hlavně jejich inicializace na začátku hry před smyčkou. Takže zapřemýšlej jak se budou tyhle tři body vzájemně doplňovat a začneme od té jedničky (tu budeme potřebovat pro ověření dvojky, a dvojku zase pro ověření trojky):

Kód: Vybrat vše

    A   B   C
  +---+---+---+
 0 |   |   |   |
  +---+---+---+
 1 |   |   |   |
  +---+---+---+
 2 |   |   |   |
  +---+---+---+


Písmena bych dal na sloupce, ne na řádky jak je obvyklé, aby se v případě zvětšení pole na šířku nemusela zadávat dvoumístná čísla, takhle bude omezení jen na max. 10 řádků (což dá po vykreslení na monitor 22, pro standardní pětadvacetiřádkové rozlišení tak akorát) a mnohem jednodušší načítání zadaných souřadnic.
Bylo by také dobré, kdyby šlo zadat b1, B1, 1b i 1B a program to správně převedl.
Ale to bude na řadě až po vykreslení, takže zkus navrhnout jak tu tabulku poskládat. Bude na to úplně stačit pár smyček for() a fukce printf() a putchar().
A bacha na jednu věc, než funkci zobraz() z main() poprvé zavoláš, musíš pole nejdřív inicializovat - vynulovat (v tomhle případě vyplnit mezerami), aby se na tebe nevysypaly nesmysly co jsou v paměti odminula!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů