Page 1 of 1

ConnectFour lol

Posted: 07 Dec 2011, 21:35
by kristapuciitis
Mans pirmais spēļuks šajā forumā :D . Spēli sataisīju šovakar, lai iemācītos taisīt checkingu, kas pēc katra gājiena nosaka, vai kāds nav uzvarējis (bubu, novērtē, lūdzu, cik kvalitatīvi es izveidoju to check funkciju). Spēlē ir tikai 2 player mode (nav single player). Taisīta ar C#, XNA.

Re: ConnectFour lol

Posted: 07 Dec 2011, 22:04
by bubu
Tas Check kods ir briesmīgi lasāms (un pārbaudāms uz pareizību). Es tur lietotu ciklus:

Code: Select all

    readonly int[] dx = new int[] { 0, 1, 1, -1 };
    readonly int[] dy = new int[] { 1, 0, 1, 1 };
    const int LIMIT = 4;

    void Check(int X, int Y, State state)
    {
        for (int i=0; i<4; i++)
        {
            int cnt = 1;

            int curX = X + dx[i];
            int curY = Y + dy[i];
            
            while (cnt < LIMIT && curX >= 0 && curY >= 0 && curX < LEVEL_SIZE && curY < LEVEL_SIZE)
            {
                if (cell[curX, curY] == state)
                {
                    cnt++;
                }
                curX += dx[i];
                curY += dy[i];
            }

            curX = X - dx[i];
            curY = Y - dy[i];
            
            while (cnt < LIMIT && curX >= 0 && curY >= 0 && curX < LEVEL_SIZE && curY < LEVEL_SIZE)
            {
                if (cell[curX, curY] == state)
                {
                    cnt++;
                }
                curX -= dx[i];
                curY -= dy[i];
            }
            
            if (cnt == LIMIT)
            {
                winner = state;
                IsGamePlayer = false;
                break;
            }
        }
    }
Šādā veidā var arī viegli pamainīt ConnectFour uz ConnectFive, vai ConnectTen. Tavā kodā ConnectTen izskatītos diezgan briesmīgi.

Re: ConnectFour lol

Posted: 07 Dec 2011, 22:43
by kristapuciitis
bubu wrote:Tas Check kods ir briesmīgi lasāms (un pārbaudāms uz pareizību). Es tur lietotu ciklus:

Šādā veidā var arī viegli pamainīt ConnectFour uz ConnectFive, vai ConnectTen. Tavā kodā ConnectTen izskatītos diezgan briesmīgi.
Paldies! Vajadzēs iegaumēt šādu paņēmienu. Tur tikai kļūda- viņš reāģē arī, ja starp vienas krāsas laukiem ir tukši lauki vai enemy krāsas lauks. Bet to es rīt izlabošu un ievietošu bugfix'u :D.

Re: ConnectFour lol

Posted: 08 Dec 2011, 03:11
by bubu
Ā, jā, while nosacījumi jāpielabo:

Code: Select all

while (cnt < LIMIT && curX >= 0 && curY >= 0 && curX < LEVEL_SIZE && curY < LEVEL_SIZE && cell[curX, curY] == state)
{
    cnt++;
    curX += dx[i];
    curY += dy[i];
}
Tas pats ar otru while ciklu.

Re: ConnectFour lol

Posted: 08 Dec 2011, 17:33
by vecais_dumais_laacis
btw alt+print screen captureet tikai aktiivo logu - lai nebuut tears in heaven

Re: ConnectFour lol

Posted: 06 Feb 2012, 23:06
by kristapuciitis
vecais_dumais_laacis wrote:btw alt+print screen captureet tikai aktiivo logu - lai nebuut tears in heaven
kas slikts tears in heaven?