Pereiti prie turinio

C++ Pradžiamokslio programa


Rekomenduojami pranešimai

Programa skirtas pradžiamoksliams | Sukurta pradžiamokslio

Temos aprašymas daug ką pasako. :)

 

Taigi pirmiausia sveiki visi. Iškart parašysiu, ką rasite šitame pranešime, kadangi ne visi mėgsta skaityti ilgas litanijas. ^_^

 

Čia pristatysiu savo pirmą "rimtesnę" programą sukurtą su c++. Joje stengiausi viską paaiškinti rašydamas komentarus, galbūt tai padės kitiems pradžiamoksliams. Programą kūriau norėdamas įtvirtinti išmoktus c++ pagrindus. Siūlau ir kitiems tai padaryti.

 

Kas per programa?

 

Tai lyg ir konsolinis "Hangman" žaidimas. Spėji raides už teisingai atspėtus žodžius gauni taškus.

 

 

Kodėl programa skirta pradžiamoksliams?

 

Na iš esmės pats ne per seniausias pradėjau domėtis c++, išmokau pagrindinius ciklus, susipažinau su kintamaisiais, funkcijomis ir darbu su failais. Taigi išmokus visus šiuos dalykus reikia juos kažkur panaudoti, bet kur? Taigi pagalvojau reikia kažką sukurti. Pirma mintis buvo kurti banko sistemėlę kur gali sukti ruletę, laimėti pinigų, dėti juos į banką, atrodė lyg ir visai neblogai juk tai pirmoji programa, bet naktį į galvą atėjo kur kas geresnė mintis: kodėl nesukūrus kažko įdomiau? Iškart pagalvojau gal reiktu sukurti kažkokį žaidimą? Hangman atrodė lyg ir paprasčiausias variantas tačiau viduje glūdėjo daug sunkumų (reikia ištraukti žodžius iš .txt failų juos sudėti į kintamuosius tada tikrinti ar spėjimus ir etc.)

 

 

Kaip sekėsi?

 

*Pirmas blynas buvo tikrai prisvilęs programa veikė tik su tam tikru raidžių skaičių, taip pat viskas buvo paremta sąlygomis (atrodė ganėtinai baisiai).

*Antras kartas buvo šiek tiek geresnis pradėjau naudoti sąlygas, bet raidžių skaičius dar negalėjo kisti.

*Trečias kartas nemelavo, pavyko padaryti, kad programa veiktu su įvairiausiu raidžių skaičiumi.

 

 

Viso to nauda?

 

Teko susipažinti su c++ vector, pradėjau geriau suprasti ciklus, jų veikimo principus, geriau išmokau dirbti su failais ir begale kitų dalykų.

 

Ką reiktų paminėti?

 

1.Žodžiai yra angliški, programoje nėra lietuviškų raidžių (c++ kalboje tas dalykas tiesiog žudo, kadangi reikia prirašyti papildomo kodo prieš kiekvieną cout).

2.Nežinau ar visi žodžiai yra taisyklingi, kadangi ištraukiau juos iš vienos svetainės.

3.Lygiai skiriasi žodžių ilgumais ir taškų gavimu.

4.Žinau, kad negerai, kad visą kodą surašiau vienam lape, tiesiog taip man buvo patogiau.

 

Taigi mano prašymas:

 

Žmonės kurie yra įgudę c++ ir turi laisvo laiko, jeigu galite pažiūrėkite ar nėra klaidų (nekalbu apie saugumo), ar rinktasis racionalus kelias. Visgi aš pats esu pradžiamokslis, tad programa tikrai gali atrodyti kvailai labiau nusimanantiems. Net nežinau ar ji tinkamai veiks ant jūsų kompiuterio (pas mane ji veikė :D ).

 

Pabaigai: manau yra tikrai labai naudinga pabandyti kažką sukurt, žinoma pradžioje, kad ir nelabai sudėtingo, bet žinių įgausite tikrai daugiau negu skaitydamas knygas.

 

 

Atnaujinimai:

*0.2 Žaidimo main.cpp failo kodas sutrumpintas iki 173 eilučių (komentarai palikti). Padaryta funkciją po atspėto arba neatspėto žodžio tęsti žaidimą. Dauguma funkcijų sudėta į klases.

 

P.S dėl to, kad kodą rašiau dalimis jis gali būti išsimėtęs, todėl geriausia atsidaryti main.cpp failą, programa neveiks be 1lv.txt, 2lv.txt, 3lv.txt failų, bėja reikia susikurti savo vartotoją.

Žaidimas prisegtas.

 

Main.cpp

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na kodo daug, tikrai manau būtų galima padaryti su mažiau. :) Greitai permečiau akimis. Pagirtina už tokį darbą.

 

Pats biški dirbau su C++, tik ne hangman dariau, o TicTacToe ir multiplayer per socket'us, tai jei įdomu, galėčiau parodyti privačiai. :)

Redagavo FaitasS
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na kodo daug, tikrai manau būtų galima padaryti su mažiau. :) Greitai permečiau akimis. Pagirtina už tokį darbą.

 

Pats biški dirbau su C++, tik ne hangman dariau, o TicTacToe ir multiplayer per socket'us, tai jei įdomu, galėčiau parodyti privačiai. :)

 

Koks klausimas Faitai? :blink: ŽINOMA :)

 

Beje kodo gali atrodyti daug vien dėl to, kad 3x kartojasi žaidimo kodas tiesiog pasikeičia lygis ir dar dėl tų visų prisijungimų, registracijų. Šiaip vieno pačio žaidimo kodas būtų kur kas mažesnis (be registracijų, prisijungimų, lygių). Nors tikiu, kad kodą galima sumažinti.

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėl lietuvybės tai man atrodo galima pakeiti kalbą visoje programoje su setlocale(LC_ALL, "Lithuanian");

 

Na taip, bet ant kiekvieno kompiuterio ten skirtingai gali gautis pas vienus veiks, pas kitus ne todėl nenorėjau rizikuoti. Beje ar kažkas jau išbandė programą? :rolleyes:

 

Dėl lietuvybės tai man atrodo galima pakeiti kalbą visoje programoje su setlocale(LC_ALL, "Lithuanian");

 

Na taip, bet ant kiekvieno kompiuterio ten skirtingai gali gautis pas vienus veiks, pas kitus ne, todėl nenorėjau rizikuoti. Beje ar kažkas jau išbandė programą? :rolleyes:

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Skaitau komentarus, žiūriu žmonės kodo kiekiu skundžiasi, pažiūriu ir pats į kodą... 700+ eilučių... joooooo...

Leisk paklausti... Žinai kas yra funkcijos? Vien tai daug sutrumpintų kodą. Antra kam rašyti kelis kartus tą patį kodą? Labiau su ciklais pasižaisk, pvz taip:

 

while(UserWantsToEndGame != true)
{
  //prasideda viena zaidimo serija tarp sekancio ciklo
   while(pergale != true)
   {
    //zaidimo kodas
   }
  //resetini duotus duomenis
  //ir vel prasides nauja zaidimo serija
}

 

Tikiuosi princip1 pagavai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Skaitau komentarus, žiūriu žmonės kodo kiekiu skundžiasi, pažiūriu ir pats į kodą... 700+ eilučių... joooooo...

Leisk paklausti... Žinai kas yra funkcijos? Vien tai daug sutrumpintų kodą. Antra kam rašyti kelis kartus tą patį kodą? Labiau su ciklais pasižaisk, pvz taip:

 

while(UserWantsToEndGame != true)
{
  //prasideda viena zaidimo serija tarp sekancio ciklo
   while(pergale != true)
   {
    //zaidimo kodas
   }
  //resetini duotus duomenis
  //ir vel prasides nauja zaidimo serija
}

 

Tikiuosi princip1 pagavai.

 

Labai dėkui, badysiu trumpinti ir padaryti spėliojimą iki tol kol žaidėjas pageidauja. Beje bandysiu iš tekstinių failų pereiti prie duomenų bazės, bet žinot kaip būna minčių daug tik norisi kurti kažką naują, todėl nieko nepažadu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tikrai, struktūros kažkokios... Viena funkcija viskam su 13 indentacijos lygių nėra gerai, kaip ir kintamųjų deklaracijos po visą funkciją (tą pačią 700 eilučių), kaip ir system("PAUSE").

Šiaip jau programų išvis nereikia pausint – jei tai konsolinė programa, tai ir leisk iš konsolės ir ji neišnyks pasibaigus.

 

Komentarai yra per daug „captain obvious“. Ta prasme, tikrai nereikia aiškint, ką reiškia.

operacija == 1

arba

// Pasibaigus ciklui patikriname ar gyvybės baigėsi, jeigu taip išvedame pabaigos žodžius
                                       if (gyvybes == 0)

Vektoriaus ilgį juk gali gauti su tam tikru metodu (length() galbūt? neatsimenu). Kam daryti fiksuotą kažkur kode?

int rand_index = rand() % 7206;

Ir dar kartą – tiesiog struktūros... :)

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tikrai, struktūros kažkokios... Viena funkcija viskam su 13 indentacijos lygių nėra gerai, kaip ir kintamųjų deklaracijos po visą funkciją (tą pačią 700 eilučių), kaip ir system("PAUSE").

Šiaip jau programų išvis nereikia pausint – jei tai konsolinė programa, tai ir leisk iš konsolės ir ji neišnyks pasibaigus.

 

Komentarai yra per daug „captain obvious“. Ta prasme, tikrai nereikia aiškint, ką reiškia.

operacija == 1

arba

// Pasibaigus ciklui patikriname ar gyvybės baigėsi, jeigu taip išvedame pabaigos žodžius
                                       if (gyvybes == 0)

Vektoriaus ilgį juk gali gauti su tam tikru metodu (length() galbūt? neatsimenu). Kam daryti fiksuotą kažkur kode?

int rand_index = rand() % 7206;

Ir dar kartą – tiesiog struktūros... :)

 

Taigi su viskuo daug maž sutinku. Tik keli dalykėliai. System("PAUSE") naudojau, kad žmonės galėtų programą leisti per .exe failą, kadangi pvz.: bandant užsiregistruoti gauni tokią žinutę: "vartotojo vardas jau egzistuoja" , tačiau, kadangi nėra pauzės tu to nespėji pamatyti. (Šiaip aš jos nebūčiau naudojęs).

 

Toliau "Komentarai yra per daug „captain obvious“. " dar kartą pasikartosiu programa kuriama pradžiamoksliams ir tiems kurie galbūt visiškai nieko neišmano apie programavimą, todėl viską stengiausi kuo aiškiau paaiškinti.

 

Dėl paskutinės dalies kitam update į tai atkreipsiu dėmesį. Šiaip dėkui už patarimus, taip pat smagu, kad į kodą kažkiek įsigilinai. :)

 

radau buga, jei speji ta pačią jau neatspėtą raidę, gyvybių skaičius nemažėja

 

Čia ne "bugas" visa tai yra todėl, kad ne visi žmonės susigaudo su tomis naudotomis raidėmis (nepamato jų). Tad kodėl atimti gyvybę kelis kartus už tą pačia raidę.

 

Svarbu:

 

Taigi padariau pirmus atnaujinimus programai. Tikrai manau, kad tai ne paskutinis atnaujinimas. Apie atnaujinimą parašiau temoje. Nauji failai jau prisegti. :)

Redagavo Pattio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dar kiek pažiūrėjau pas tave galima lygtais tik raides spėliot, nors kiek atsimenu per kartuves galima ir iškarto visą žodį spėti :)

 

P.S. sugalvojau ir pats parašyt hangman'ą :D pažiūrėsim kas gausis

 

Na taip, nebent surašai visas raides iškarto (visą vidurį) ir iškart įvykdys visus ciklus ir gausis visas žodis.

 

Matai kaip gerai. Siūlau visiems kuriems atsibodo spręsti uždavinius pabandyti kažką įdomesnio ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taigi su viskuo daug maž sutinku. Tik keli dalykėliai. System("PAUSE") naudojau, kad žmonės galėtų programą leisti per .exe failą, kadangi pvz.: bandant užsiregistruoti gauni tokią žinutę: "vartotojo vardas jau egzistuoja" , tačiau, kadangi nėra pauzės tu to nespėji pamatyti. (Šiaip aš jos nebūčiau naudojęs).

 

Toliau "Komentarai yra per daug „captain obvious“. " dar kartą pasikartosiu programa kuriama pradžiamoksliams ir tiems kurie galbūt visiškai nieko neišmano apie programavimą, todėl viską stengiausi kuo aiškiau paaiškinti.

 

Dėl paskutinės dalies kitam update į tai atkreipsiu dėmesį. Šiaip dėkui už patarimus, taip pat smagu, kad į kodą kažkiek įsigilinai. :)

 

„Pradžiamokslis“ tai yra man rodos pradinis mokymosi šaltinis, o ne „naujokas“. :lol: Ta prasme, ne iš kodo reikia mokytis pačius pačius pirmuosius žingsnelius (tokius, kaip paprasčiausias palyginimas).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kažkiek jau aš ir padariau, labai dar neišbaigtas, bet šiandien tingiu daugiau ką bedaryt:

 

Siaip truputį durnai padariau kad žodžiai spėliojami lietuviški, tačiau kodą norejau visą rašyt angliškai tai gavos ir tekstas angliškas :D

 

Kodas: Main: http://pastebin.com/42DMfcHA

Header: http://pastebin.com/PLAfGpYw

Labai neišbaigtas kaip sakiau, žožiai spėliojami lietuviški, bet be lietuviškų raidžių, nesupras didžiūjų raidžių ir pnš.

 

Bugai tokie, jog, pradedant žaidimą iš niekur dingsta viena gyvybė pačioj pradžioj, nieko neįvedus pradžioj rodo tarp spėjimų kažkodėl būna vienas spėjimas "w"

 

Galvojau dar su piešiniu daryt HangMan'o, bet labai daug kodo užimtų, nes kol kas nesugalvojau būdo kaip ji vis atnaujint, pridedant po vieną kūno dalį neperpiešiant viso to piešinio, dėl to atsirastų 7 piešiniai, ir turbūt 100~200 papildomų eilučių.

 

Rytoj gal dabaigsiu :)

mine.rar

Nuoroda į pranešimą
Dalintis kituose puslapiuose

„Pradžiamokslis“ tai yra man rodos pradinis mokymosi šaltinis, o ne „naujokas“. :lol: Ta prasme, ne iš kodo reikia mokytis pačius pačius pirmuosius žingsnelius (tokius, kaip paprasčiausias palyginimas).

 

Klausyk aš niekaip nesuprantu kodėl tau taip maišo tie komentarai? :blink: Gal kitiem žmonėms jie padaro viską žymiai aiškiau, beje aš niekur nerašiau, kad iš iš kodo reikia pradėti mokytis, aš rašiau, kad kaip žmonės išmoksta pagrindų gali pradėti kurti kažką įdomiau, čia vienas iš pavyzdžių...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Klausyk aš niekaip nesuprantu kodėl tau taip maišo tie komentarai? :blink: Gal kitiem žmonėms jie padaro viską žymiai aiškiau, beje aš niekur nerašiau, kad iš iš kodo reikia pradėti mokytis, aš rašiau, kad kaip žmonės išmoksta pagrindų gali pradėti kurti kažką įdomiau, čia vienas iš pavyzdžių...

Viskas turi būti su saiku :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Klausyk aš niekaip nesuprantu kodėl tau taip maišo tie komentarai? :blink: Gal kitiem žmonėms jie padaro viską žymiai aiškiau, beje aš niekur nerašiau, kad iš iš kodo reikia pradėti mokytis, aš rašiau, kad kaip žmonės išmoksta pagrindų gali pradėti kurti kažką įdomiau, čia vienas iš pavyzdžių...

Ei ei, nereik taip asmeniškai įsižeisti – pastebėjimas juk ir tiek, gali ignoruot. O komentuoti tinkamai, gal tau bus keista, bet irgi svarbus reikalas...

 

Čia gal aš suklysiu, nes su C mažai užsiimu, bet ar headeryje neturėtų ir būti tik headeriai (na, ir konstantos ir pan.), o ne pačios funkcijos?

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kažkiek jau aš ir padariau, labai dar neišbaigtas, bet šiandien tingiu daugiau ką bedaryt:

 

Siaip truputį durnai padariau kad žodžiai spėliojami lietuviški, tačiau kodą norejau visą rašyt angliškai tai gavos ir tekstas angliškas :D

 

Kodas: Main: http://pastebin.com/42DMfcHA

Header: http://pastebin.com/PLAfGpYw

Labai neišbaigtas kaip sakiau, žožiai spėliojami lietuviški, bet be lietuviškų raidžių, nesupras didžiūjų raidžių ir pnš.

 

Bugai tokie, jog, pradedant žaidimą iš niekur dingsta viena gyvybė pačioj pradžioj, nieko neįvedus pradžioj rodo tarp spėjimų kažkodėl būna vienas spėjimas "w"

 

Galvojau dar su piešiniu daryt HangMan'o, bet labai daug kodo užimtų, nes kol kas nesugalvojau būdo kaip ji vis atnaujint, pridedant po vieną kūno dalį neperpiešiant viso to piešinio, dėl to atsirastų 7 piešiniai, ir turbūt 100~200 papildomų eilučių.

 

Rytoj gal dabaigsiu :)

 

Na taip dar ką pastebėjau, kad kažkaip prie spėjimų prirašo labai daug raidžių ir šiaip kartais kažkokias iš "lempos". Ir kiek atsimenu hangman'e turi būti pirma ir paskutinė raidės parodytos :D Dar galėtų įdomumo dėlei atvaizduoti koks buvo žodis, bet šiaip manau buvau visai įdomu argi aš klystu? :)

 

Ei ei, nereik taip asmeniškai įsižeisti – pastebėjimas juk ir tiek, gali ignoruot. O komentuoti tinkamai, gal tau bus keista, bet irgi svarbus reikalas...

 

Neįsižeidžiau, tiesiog man tai nesuprantama, na, bet nesvarbu.. Visiškai nekeista. Tiesiog dar kartą pasikartosiu norėjau viską išaiškinti, kad sugebėtų net mano draugas suprasti dar tik pradėdamas c++ (pagrinde dėl jo dariau šį dalyką , dar žinoma ir pats norėjau kažką įdomesnio padaryti)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na taip dar ką pastebėjau, kad kažkaip prie spėjimų prirašo labai daug raidžių ir šiaip kartais kažkokias iš "lempos". Ir kiek atsimenu hangman'e turi būti pirma ir paskutinė raidės parodytos :D Dar galėtų įdomumo dėlei atvaizduoti koks buvo žodis, bet šiaip manau buvau visai įdomu argi aš klystu? :)

Kaip jau sakiau nebeturiu laiko šiandien kažką dirbti, todėl šito darbo negalėčiau nei beta versija pavadinti, pradžioj tiesiog stengiausi pagrindą (core) padaryti žaidimo ir viskas.

Bei dėl taisyklių, tai klysti: http://en.wikipedia.org/wiki/Hangman_(game)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kaip jau sakiau nebeturiu laiko šiandien kažką dirbti, todėl šito darbo negalėčiau nei beta versija pavadinti, pradžioj tiesiog stengiausi pagrindą (core) padaryti žaidimo ir viskas.

Bei dėl taisyklių, tai klysti: http://en.wikipedia.org/wiki/Hangman_(game)

 

Visą gyvenimą žaidžiau palengvintą versiją :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 3 mėnesių...

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...