Vislice
Vsi poznamo igro Vislice, ki smo jo včasih igrali v šoli na tablo ali na papir. Ker je šolstvo zapadlo v nedoumljivo recesijo, učitelji krede zaklepajo,
vsaka poraba papirja v nešolske namene pa se strogo kaznuje, napiši šolstvu "prijazen" program, s katerim bodo otroci med odmori (ah le kdo bi se učil)
lahko igrali to priljubljeno igro Vislice.
Pobrskajmo malo po spominu:
- Prvo črko besede vedno izpišemo (če se le ta v skriti besedi ponovi, izpišemo tudi to)
- Igralec ugiba po črkah in ima 10 ugibov, preden se igra zaključi in je obešen, če ne ugane besede
- Če igralec ugiba besedo in ni pravilna je takoj obešen in igra se zaključi
- ... pa še kaj bi se našlo :-)
* Ko uporabnik vpiše besedo, kreiramo dve tabeli tipa char veliki kot ima beseda znakov. V prvo tabelo vpišemo posamezne črke rešitve. V drugo pa vpišemo prvo črko rešitve in v primeru, da se prva črka v besedi ponovi, na ustrezno mesto vpišemo tudi ponovljeno. Ostale "celice" napolnimo z zvezdico * Potem sledi le še preverjanje vnešenega znaka ali več znakov, če uporabnik ugiba direktno * Na koncu seveda sledi izpis o uspehu oziroma neuspehu * Če ugib ni bil uspešen, naredimo izpis začasne tabele, da uporabnik ve katere črke je že uganil in katera mesta v besedi mora še izpolniti * Otroci so ponavadi zelo dovzetni za vizualne "efekte", zato izrišemo še obešenca (v primeru, da ni bil uspešen pri ugibanju.
namespace Vislice
{
class Program {
static void Main(string[] args) {
Console.WriteLine("V*I*S*L*I*C*E");
Console.WriteLine("-------------");
Console.Write("\nVnesi \"skrito\" besedo: ");
string beseda = Console.ReadLine();
beseda = beseda.ToUpper();
//spremenimo v velike črke zaradi lepšega izpisa
int dolzina = beseda.Length;
string zacasna = "";
string zacasnoPoCrkah = "";
char[] tabResitev = new char[dolzina];
char[] tabZacasna = new char[dolzina];
//kreiramo novi tabeli eno za rešitev in drugo za ugibanje in primerjanje
Console.Clear();
//izbrišemo vsebino okna
Console.WriteLine("V*I*S*L*I*C*E");
Console.WriteLine("-------------\n");
//ponovno izpišemo naslovno vrstico - zaradi izgleda :-)
for (int i = 0; i < dolzina; i++) {
char znak = beseda[i];
tabResitev[i] = znak;
}
//napolnimo tabelo s črkami skrite besede
tabZacasna[0] = tabResitev[0];
//prva črka se vedno prikaže
for (int i = 1; i < dolzina; i++)
//prvo črko imamo že v tabeli, zato pričnemo z "celico" ena
{
tabZacasna[i] = '*';
}
//ostalo tabelo napolnimo z zvezdicami
for (int i = 0; i < dolzina; i++) {
char znak = beseda[0];
if (znak == tabResitev[i]) {
tabZacasna[i] = znak;
}
}
/*preverimo če se kje v besedi ponovi prva črka in jo prenesemo
v začasno tabelo */
for (int i = 0; i < dolzina; i++) {
zacasna = zacasna + tabZacasna[i];
}
Console.WriteLine("Iščemo besedo: " + zacasna + "\nNa voljo imaš 10 poizkusov!\n");
/*izpišemo besedo z zvezdicami in prvo črko v besedi (če se prva črka
ponovi, se izpiše tudi ponovljeni znak!*/
for (int i = 1; i <= 10; i++) {
Console.Write(i + ". poizkus - " + "Vnesi črko ali rešitev: ");
string ugib = Console.ReadLine();
ugib = ugib.ToUpper();
bool pravilno = true;
if (ugib.Length > 1)
// če je vnešeni niz daljši kot 1, domnevamo da igralec uganjuje besedo
{
if (ugib.Length != dolzina) {
Console.WriteLine("\nŽal ta beseda ni pravilna.\nIskali smo besedo " + beseda + "!");
Console.WriteLine("\nOBEŠEN SI!!!");
Console.WriteLine(" _____");
Console.WriteLine(" | |");
Console.WriteLine(" | 0");
Console.WriteLine(" | /|\\");
Console.WriteLine(" | / \\");
Console.WriteLine(" |");
Console.WriteLine("_|_");
break;
}
//če se že sama dolžina "ugiba" ne ujema z iskano besedo, izpišemo da beseda ni pravilna
else {
for (int k = 0; k < dolzina; k++) {
if (tabResitev[k] != ugib[k]) {
pravilno = false;
}
}
if (pravilno == true) {
Console.WriteLine("Bravo, uganil si pravilno besedo!");
break;
} else {
Console.WriteLine("Žal ta beseda ni pravilna!\nIskali smo besedo: " + beseda + "!");
Console.WriteLine("\nOBEŠEN SI!!!");
Console.WriteLine(" _____");
Console.WriteLine(" | |");
Console.WriteLine(" | 0");
Console.WriteLine(" | /|\\");
Console.WriteLine(" | / \\");
Console.WriteLine(" |");
Console.WriteLine("_|_");
break;
}
/*če se dolžina ujema preverimo, če je to prava beseda in izpišemo rezultat
* IGRE JE V VSAKEM PRIMERU KONEC ČE DIREKTNO UGIBA BESEDO!*/
}
} else {
char ugibCrka = ugib[0];
//spremenimo string ugib v znak char
for (int j = 0; j < beseda.Length; j++) {
if (ugibCrka == tabResitev[j]) {
tabZacasna[j] = ugibCrka;
}
}
//če je ugib pravilen, se znak "kopira" v začasno tabelo
zacasnoPoCrkah = "";
//spraznimo string, ker je mogoče polna še iz prejšnje zanke
for (int j = 0; j < beseda.Length; j++) {
zacasnoPoCrkah = zacasnoPoCrkah + tabZacasna[j];
}
if (zacasnoPoCrkah == beseda)
//našli smo že vse črke in s tem celo besedo
{
Console.WriteLine("\nČestitam, odkril si pravo besedo!\n\nIskali smo besedo: " + beseda);
break;
//zaključimo zanko
} else {
Console.WriteLine("Delna rešitev: " + zacasnoPoCrkah);
/*izpišemo vsebino tabele za nadaljevanje, uporabniku izpišemo katere črke
je že uganil in nadaljujemo z igro */
}
if (i == 10) {
Console.WriteLine("\nOBEŠEN SI!!!");
Console.WriteLine(" _____");
Console.WriteLine(" | |");
Console.WriteLine(" | 0");
Console.WriteLine(" | /|\\");
Console.WriteLine(" | / \\");
Console.WriteLine(" |");
Console.WriteLine("_|_");
/* v desteih korakih uporabnik žal ni uganil besede... izpišemo mu, da je
obešen. Zraven pa mu to še nazorno prikažemo :-)*/
break;
}
}
}
Console.WriteLine("\nPritisni karkoli za konec...");
Console.ReadKey();
}
}
}