algorytm komputera w kolko i krzyzyk

0

Witam

Próbuje napisać prosty algorytm dla kompa w kolko i krzyzyk polegający ze sprawdza sie cała plansze gry i jesli znajdze swoj znak albo przeciwnika to probuje wstawic (z prawej lewej góra itp) gdzie bedzie wolne, a jesli jest zajete sawia o +2 pol z boku , zamiesze to co napisałem i licze ze ktos pomoże , z gory thx

void poziom2(int x, int y){
		for(x=0; x<wymiar; x++){
			
			for(y=0; y<wymiar; y++){
				
					if (p[x][y]->postawkrzyzyk() || p[x][y]->postawkolko())
					{

						for(int i=x+1;i<wymiar;i++){
						
							
							while(p[i][y]->postawkrzyzyk() || p[i][y]->postawkolko())
							{
								i++;
								delete p[x][y];
								p[i][y]=new Kolko;
								
							
							}
							
								break;				
							
							
						}
						
					}

			}
		} 

	}

na razie wersja tylko za stawia do dolu, ale jak to ebdziue dzialac to reszta pójdzie

0

Napisz to lepiej ifami, bo z taką złożonością to sobie nie pograsz...

0

plansza gry ma byc zmienna do 20 x20 wiec ifami odpada

0
baracuda2 napisał(a)

plansza gry ma byc zmienna do 20 x20 wiec ifami odpada

no to zrób to od ostatniego miejsca, gdzie postawił człowiek i możesz (nawet rekurencyjnie) sprawdzać na granicy zajętych pól, które sąsiadują (nie koniecznie bezpośrednio) z tym polem gdzie był ostatni ruch. To powinno wystarczyć, żeby komputer mógł wygrywać. Jeżeli poszerzysz granice sprawdzania dodatkowo o 3-5 pól to powinieneś móc wygrywać w 95% przypadkach

0

Jak dla mnie to ten kod to co najmniej kilka WTF:

  1. argumenty funkcji nic nie robią, bo je kasujesz pętlami for
if (p[x][y]->postawkrzyzyk()  || p[x][y]->postawkolko())

????
Jak widzę "postawkrzyzyk" to spodziewam się, że to wykona ruch na tym polu. Ale w momencie kiedy to widzę w warunku i na dodatek z alternatywą postawienia kołka to zupełnie głupieje. Najwyraźniej źle nazwałeś metodę.
3. Plansza jest tablicą (macierzą) wskaźników na pole???? Po co, dlaczego? Tablica 2d char w tym wypadku zupełnie by wystarczyła i była by bardziej naturalna (przynajmniej dla mnie).
4. pętla for po i. Czemu od x+1? I co to właściwie ma robić? to delete i new też jest wielką tajemnicą.

0

takie wymagania w zadaniu

tak troche zle nazwane, skaznik na kolo czy krzyzyk

a mogbys napisac jak to powino wygladac?

bo siedze nad tym juz z 3 godz

0

mzoe z tym da sie cos zrobic aby dzialalo

void poziom2(int x, int y){
                for(x=0; x<wymiar; x++){
                       
                        for(y=0; y<wymiar; y++){
                               
                                        while(p[x][y]->getX() || p[x][y]->getO())
                                        {
											y++;
											while (p[x][y]->getX() || p[x][y]->getO()){
												 int i=1;
												 i++;
												 y+i;
												 if(y>wymiar)
													 break;
											}
											 


											delete p[x][y];
											p[x][y] = new Kolko;
                                                                             
 
                                        }

                        }
                }

        }

jak mzona wyciagnac w rychu komputera info o ostatnim ruchu gracza wczesniej?

0

Co to jest skaźnik???:D

0

To takie coś co skazuje nas na porażkę ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1