Jump to content

KĀRŠU SPĒLE, uzrakstīju uz c#


BRT2008
 Share

Recommended Posts

Jau kādu laiku apgūstu c#, kā ietvaros uzrakstīju kāršu spēli.

 

426e56c8f3c4.jpg

 

Spēlētāja uzdevums savākt 4 vienādas kārtis, mainoties ar citiem spēlētājiem.

Citi spēlētāji jums pretī dos tās kārtis, kuras tiem ir vismazāk vajadzīgas - tas arī ir spēles AI. :)

Ja gribat redzēt citu spēlētāju kārties, atzīmējiet "show all cards", ja gribat lai citi nevar mainīties savā starpā, atzīmējiet "only you can move".

 

frame1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;


namespace goFish
{
   public partial class Form1 : Form
   {

       bool riseCards = true;
       bool playerMoves = false;
       string riseCard1, riseCard2, riseCard3, riseCard4, activeSwap;
       int RisedCardLeft, randomCard, activeCard;
       Random random = new Random();
       Dictionary<CardType, System.Drawing.Image> newDeckImages = new Dictionary<CardType, System.Drawing.Image>();
       List<CardType> newDeckList = new List<CardType>();
       CardType noneCard = CardType.none;

       //////////////////////////////////////////////// создаём игроков ///////////////
       players Terminator = new players();
       players Elvis = new players();
       players Merilyn = new players();
       players Sherlock = new players();



       public Form1()
       {
           InitializeComponent();
       }





       public void openNewDeck()    ////////////////////////////////// создаём новую колоду карт ////////////
       {

           for (int i = 0; i != 4; i++)
           {
               newDeckList.Add(CardType.Diamonds);
               newDeckList.Add(CardType.Hearts);
               newDeckList.Add(CardType.Clubs);
               newDeckList.Add(CardType.Spades);
           }


           //////////////////////////////////////////////////////////////// раздаём колоду игрокам //////////////          

           for (int i = 0; i != 4; i++)
           {
               randomCard = random.Next(0, newDeckList.Count );
               Terminator.cards.Add(newDeckList[randomCard]);
               newDeckList.RemoveAt(randomCard);

               randomCard = random.Next(0, newDeckList.Count );
               Elvis.cards.Add(newDeckList[randomCard]);
               newDeckList.RemoveAt(randomCard);

               randomCard = random.Next(0, newDeckList.Count );
               Merilyn.cards.Add(newDeckList[randomCard]);
               newDeckList.RemoveAt(randomCard);

               randomCard = random.Next(0, newDeckList.Count );
               Sherlock.cards.Add(newDeckList[randomCard]);
               newDeckList.RemoveAt(randomCard);
           }

       }



       public void showMyCards()  //////////////////////////// Показываем карты игрока ///////////////
       {
           pb_termCard1.Image = newDeckImages[Terminator.cards[0]];
           pb_termCard2.Image = newDeckImages[Terminator.cards[1]];
           pb_termCard3.Image = newDeckImages[Terminator.cards[2]];
           pb_termCard4.Image = newDeckImages[Terminator.cards[3]];
           if (checkBox1.Checked == true) { showAllCards(); } /////////////// если отмечен checkBox1, то показываем и все остальные карты
       }


       public void showAllCards()  ///////////////////////////////// Показываем карты остальных игроков ///////////////
       {
           pb_elvisCard1.Image = newDeckImages[Elvis.cards[0]];
           pb_elvisCard2.Image = newDeckImages[Elvis.cards[1]];
           pb_elvisCard3.Image = newDeckImages[Elvis.cards[2]];
           pb_elvisCard4.Image = newDeckImages[Elvis.cards[3]];

           pb_merilynCard1.Image = newDeckImages[Merilyn.cards[0]];
           pb_merilynCard2.Image = newDeckImages[Merilyn.cards[1]];
           pb_merilynCard3.Image = newDeckImages[Merilyn.cards[2]];
           pb_merilynCard4.Image = newDeckImages[Merilyn.cards[3]];

           pb_sherlockCard1.Image = newDeckImages[sherlock.cards[0]];
           pb_sherlockCard2.Image = newDeckImages[sherlock.cards[1]];
           pb_sherlockCard3.Image = newDeckImages[sherlock.cards[2]];
           pb_sherlockCard4.Image = newDeckImages[sherlock.cards[3]];
       }

       private void hideAllCards()  ///////////////////////////////// Прячем карты остальных игроков ///////////////
       {
           pb_elvisCard1.Image = pb_back.Image;
           pb_elvisCard2.Image = pb_back.Image;
           pb_elvisCard3.Image = pb_back.Image;
           pb_elvisCard4.Image = pb_back.Image;

           pb_merilynCard1.Image = pb_back.Image;
           pb_merilynCard2.Image = pb_back.Image;
           pb_merilynCard3.Image = pb_back.Image;
           pb_merilynCard4.Image = pb_back.Image;

           pb_sherlockCard1.Image = pb_back.Image;
           pb_sherlockCard2.Image = pb_back.Image;
           pb_sherlockCard3.Image = pb_back.Image;
           pb_sherlockCard4.Image = pb_back.Image;
       }


       public void clearCards() ////////////////////////////////////// при необходимости очищаем список карт всех игроков /////
       {
           Terminator.cards.Clear();
           Elvis.cards.Clear();
           Merilyn.cards.Clear();
           Sherlock.cards.Clear();
       }


       /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       /////////////////////////////////////////// ПРИ ЗАГРУЗКЕ ФОРМЫ //////////////////////////////////////////////////////////

       private void Form1_Load(object sender, EventArgs e)
       {
           scoreLabel.Text = "You: " + Convert.ToString(Terminator.score) + " | Elvis: " + Convert.ToString(Elvis.score) + " | Merilyn: " + Convert.ToString(Merilyn.score) + " | Sherlock: " + Convert.ToString(Sherlock.score);

           newDeckImages.Add(CardType.Diamonds, pb_diamonds.Image); /////////// здесь хранятся ссылки на изображение карт
           newDeckImages.Add(CardType.Hearts, pb_hearts.Image);
           newDeckImages.Add(CardType.Clubs, pb_clubs.Image);
           newDeckImages.Add(CardType.Spades, pb_spades.Image);

           openNewDeck();
           showMyCards();
           playerMoves = true; ////////// первый ход предоставляем игроку.
           turnLabel.Text = "Your move.";

       }


//////////////////////////////////////////////////// кнопка перезагрузки
       private void button1_Click(object sender, EventArgs e)
       {
           clearCards();
           openNewDeck();
           showMyCards();
       }


//////////////////////////////////////////////////// checkBox1 - показываем все карты?
       private void checkBox1_CheckedChanged(object sender, EventArgs e)
       {
           if (checkBox1.Checked == true) { showAllCards(); } else { hideAllCards(); }
       }



////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////// ход делает другой игрок /////////////////////////////////////////////////////////////

       private void makeMoveElvis()
       {

           int s = random.Next(0, 2);  //////////// если s==0, то идём к Мерелин; если s==1, то к Шерлоку

           turnLabel.Text = "Elvis' move.";

           if ( s == 0)
           {
               pb_elvisMerilyn.Visible = true;
               for (int i = 0; i < 100; i++) { Application.DoEvents(); Thread.Sleep(10); }  //// показали стрелочку, перекурили
               pb_elvisMerilyn.Visible = false;
               for (int i = 0; i < 20; i++) { Application.DoEvents(); Thread.Sleep(10); }

               CardType tempCardToGive = Elvis.swapCards(noneCard); ///////////////////////// определяем, какую карту не жалко отдать
               CardType tempCardToTake = Merilyn.swapCards(tempCardToGive); ///////////////// отдаём её и получаем взамен другую
               Elvis.replaceCard(tempCardToGive, tempCardToTake); /////////////////////////// кладём ту другую на место отданной
               //////// ВНИМАНИЕ! ВОЗМОЖНО ГЛЮК ИДЁТ ОТ КУДА-ТО ОТ СЮДА! Может в каких-то случаях программа заменяет на пустую карту?

               showMyCards();
               if (CheckWinners() == "") { makeMoveMerilyn(); } //////// если победителей нет, передаём ход Мерелин

           }
           else
           {
               pb_elvisSherlock.Visible = true;
               for (int i = 0; i < 100; i++) { Application.DoEvents(); Thread.Sleep(10); }
               pb_elvisSherlock.Visible = false;
               for (int i = 0; i < 20; i++) { Application.DoEvents(); Thread.Sleep(10); }

               CardType tempCardToGive = Elvis.swapCards(noneCard);
               CardType tempCardToTake = Sherlock.swapCards(tempCardToGive);
               Elvis.replaceCard(tempCardToGive, tempCardToTake);

               showMyCards();
               if (CheckWinners() == "") { makeMoveMerilyn(); } //////// если победителей нет, передаём ход Мерелин

           }

       }

       //////////////////////////////////////////////////////////////////////////////////

   private void makeMoveMerilyn()
   {
           int s = random.Next(0, 2);

           turnLabel.Text = "Merilyn's move.";


           if ( s == 0)
           {
               pb_elvisMerilyn.Visible = true;
               for (int i = 0; i < 100; i++) { Application.DoEvents(); Thread.Sleep(10); }
               pb_elvisMerilyn.Visible = false;
               for (int i = 0; i < 20; i++) { Application.DoEvents(); Thread.Sleep(10); }

               CardType tempCardToGive = Merilyn.swapCards(noneCard);
               CardType tempCardToTake = Elvis.swapCards(tempCardToGive);
               Merilyn.replaceCard(tempCardToGive, tempCardToTake);

               showMyCards();
               if (CheckWinners() == "") { makeMoveSherlock(); }
           }
           else
           {
               pb_merylinSherlock.Visible = true;
               for (int i = 0; i < 100; i++) { Application.DoEvents(); Thread.Sleep(10); }
               pb_merylinSherlock.Visible = false;
               for (int i = 0; i < 20; i++) { Application.DoEvents(); Thread.Sleep(10); }

               CardType tempCardToGive = Merilyn.swapCards(noneCard);
               CardType tempCardToTake = Sherlock.swapCards(tempCardToGive);
               Merilyn.replaceCard(tempCardToGive, tempCardToTake);

               showMyCards();
               if (CheckWinners() == "") { makeMoveSherlock(); }
           }
   }

   //////////////////////////////////////////////////////////////////////////////////

   private void makeMoveSherlock()
   {
           int s = random.Next(0, 2);

           turnLabel.Text = "Sherlock's move.";


           if ( s == 0)
           {
               pb_merylinSherlock.Visible = true;
               for (int i = 0; i < 100; i++) { Application.DoEvents(); Thread.Sleep(10); }
               pb_merylinSherlock.Visible = false;
               for (int i = 0; i < 20; i++) { Application.DoEvents(); Thread.Sleep(10); }

               CardType tempCardToGive = Sherlock.swapCards(noneCard);
               CardType tempCardToTake = Merilyn.swapCards(tempCardToGive);
               Sherlock.replaceCard(tempCardToGive, tempCardToTake);

               showMyCards();
               if (CheckWinners() == "")
               {
                   playerMoves = true;
                   turnLabel.Text = "Your move.";
                   checkBox2.Enabled = true;
               }
           }
           else
           {
               pb_elvisSherlock.Visible = true;
               for (int i = 0; i < 100; i++) { Application.DoEvents(); Thread.Sleep(10); }
               pb_elvisSherlock.Visible = false;
               for (int i = 0; i < 20; i++) { Application.DoEvents(); Thread.Sleep(10); }

               CardType tempCardToGive = Sherlock.swapCards(noneCard);
               CardType tempCardToTake = Elvis.swapCards(tempCardToGive);
               Sherlock.replaceCard(tempCardToGive, tempCardToTake);

               showMyCards();
               if (CheckWinners() == "")
               {
                   playerMoves = true;
                   turnLabel.Text = "Your move.";
                   checkBox2.Enabled = true;
               }
           }
   }


/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////// ПОДНИМАЕМ И ОПУСКАЕМ КАРТЫ //////////////////////////////////////////////////////////////////////

       private void pb_myCard1_MouseEnter(object sender, EventArgs e)
       {
           if (riseCards == true && playerMoves == true)
           {
               riseCard1 = "rise";
               timCard1.Enabled = true;
           }
       }

       private void pb_myCard1_MouseLeave(object sender, EventArgs e)
       {
           if (riseCards == true)
           {
               riseCard1 = "lower";
               timCard1.Enabled = true;
           }
       }

       private void timCard1_Tick(object sender, EventArgs e)
       {
           if (riseCard1 == "rise" && pb_termCard1.Top > 400) { pb_termCard1.Top -= 2; }
           if (riseCard1 == "rise" && pb_termCard1.Top <= 400) { riseCard1 = "rised"; timCard1.Enabled = false; }
           if (riseCard1 == "lower" && pb_termCard1.Top < 415) { pb_termCard1.Top += 2; }
           if (riseCard1 == "lower" && pb_termCard1.Top >= 415) { riseCard1 = "lowered"; timCard1.Enabled = false; }
       }

       ///////////////////////////////////////////////////////////////////////////////////////////

       private void pb_myCard2_MouseEnter(object sender, EventArgs e)
       {
           if (riseCards == true && playerMoves == true )
           {
               riseCard2 = "rise";
               timCard2.Enabled = true;
           }
       }

       private void pb_myCard2_MouseLeave(object sender, EventArgs e)
       {
           if (riseCards == true)
           {
               riseCard2 = "lower";
               timCard2.Enabled = true;
           }
       }

       private void timCard2_Tick(object sender, EventArgs e)
       {
           if (riseCard2 == "rise" && pb_termCard2.Top > 400) { pb_termCard2.Top -= 2; }
           if (riseCard2 == "rise" && pb_termCard2.Top <= 400) { riseCard2 = "rised"; timCard2.Enabled = false; }
           if (riseCard2 == "lower" && pb_termCard2.Top < 415) { pb_termCard2.Top += 2; }
           if (riseCard2 == "lower" && pb_termCard2.Top >= 415) { riseCard2 = "lowered"; timCard2.Enabled = false; }
       }


       ///////////////////////////////////////////////////////////////////////////////////////////

       private void pb_myCard3_MouseEnter(object sender, EventArgs e)
       {
           if (riseCards == true && playerMoves == true )
           {
               riseCard3 = "rise";
               timCard3.Enabled = true;
           }
       }

       private void pb_myCard3_MouseLeave(object sender, EventArgs e)
       {
           if (riseCards == true)
           {
               riseCard3 = "lower";
               timCard3.Enabled = true;
           }
       }

       private void timCard3_Tick(object sender, EventArgs e)
       {
           if (riseCard3 == "rise" && pb_termCard3.Top > 400) { pb_termCard3.Top -= 2; }
           if (riseCard3 == "rise" && pb_termCard3.Top <= 400) { riseCard3 = "rised"; timCard3.Enabled = false; }
           if (riseCard3 == "lower" && pb_termCard3.Top < 415) { pb_termCard3.Top += 2; }
           if (riseCard3 == "lower" && pb_termCard3.Top >= 415) { riseCard3 = "lowered"; timCard3.Enabled = false; }
       }

       ///////////////////////////////////////////////////////////////////////////////////////////

       private void pb_myCard4_MouseEnter(object sender, EventArgs e)
       {
           if (riseCards == true && playerMoves == true )
           {
               riseCard4 = "rise";
               timCard4.Enabled = true;
           }
       }

       private void pb_myCard4_MouseLeave(object sender, EventArgs e)
       {
           if (riseCards == true)
           {
               riseCard4 = "lower";
               timCard4.Enabled = true;
           }
       }

       private void timCard4_Tick(object sender, EventArgs e)
       {
           if (riseCard4 == "rise" && pb_termCard4.Top > 400) { pb_termCard4.Top -= 2; }
           if (riseCard4 == "rise" && pb_termCard4.Top <= 400) { riseCard4 = "rised"; timCard4.Enabled = false; }
           if (riseCard4 == "lower" && pb_termCard4.Top < 415) { pb_termCard4.Top += 2; }
           if (riseCard4 == "lower" && pb_termCard4.Top >= 415) { riseCard4 = "lowered"; timCard4.Enabled = false; }
       }

       /////////////////////////////////////////////////////

       private void lowerAllCards( string keepThis )
       {
           if ( keepThis != "riseCard1" && riseCard1 == "rised") { riseCard1 = "lower"; timCard1.Enabled = true; }
           if ( keepThis != "riseCard2" && riseCard2 == "rised") { riseCard2 = "lower"; timCard2.Enabled = true; }
           if ( keepThis != "riseCard3" && riseCard3 == "rised") { riseCard3 = "lower"; timCard3.Enabled = true; }
           if ( keepThis != "riseCard4" && riseCard4 == "rised") { riseCard4 = "lower"; timCard4.Enabled = true; }

           if (keepThis == "riseCard1" && riseCard1 == "lowered") { riseCard1 = "rise"; timCard1.Enabled = true; }
           if (keepThis == "riseCard2" && riseCard1 == "lowered") { riseCard2 = "rise"; timCard2.Enabled = true; }
           if (keepThis == "riseCard3" && riseCard1 == "lowered") { riseCard3 = "rise"; timCard3.Enabled = true; }
           if (keepThis == "riseCard4" && riseCard1 == "lowered") { riseCard4 = "rise"; timCard4.Enabled = true; }
       }




//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////// показываем стрелочку для обмена //////////////////////////////////////////////////////////////////////

       private void showSwapTo()
       {
           if (riseCards == false ) { pb_sw.Visible = true; } else { pb_sw.Visible = false; }
           pb_sw.Image = pb_swmerilyn.Image;
           pb_sw.Left = RisedCardLeft - 27;
           activeSwap = "Merilyn";

       }




       private void pb_sw_MouseMove(object sender, MouseEventArgs e)
       {

           int cursorX = Form1.MousePosition.X - this.Left;

           if ( cursorX < RisedCardLeft )
           { pb_sw.Image = pb_swelvis.Image; pb_sw.Left = RisedCardLeft - 110; activeSwap = "Elvis"; }

           if (cursorX >= RisedCardLeft && cursorX <= RisedCardLeft + 70 )
           { pb_sw.Image = pb_swmerilyn.Image; pb_sw.Left = RisedCardLeft - 27; activeSwap = "Merilyn"; }

           if (cursorX > RisedCardLeft + 70)
           { pb_sw.Image = pb_swsherlock.Image; pb_sw.Left = RisedCardLeft + 35; activeSwap = "Sherlock"; }

       }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////




/////////// клик на карту ////////////////////////////////////////////////////////////////////////////////////

       private void pb_myCard1_Click(object sender, EventArgs e)
       {
           if (playerMoves == true )
           {
               if (riseCards == true) { riseCards = false; } else { riseCards = true; }
               lowerAllCards("riseCard1");
               RisedCardLeft = pb_termCard1.Left;
               showSwapTo();
           }
       }


       private void pb_myCard2_Click(object sender, EventArgs e)
       {
           if (playerMoves == true)
           {
               if (riseCards == true) { riseCards = false; } else { riseCards = true; }
               lowerAllCards("riseCard2");
               RisedCardLeft = pb_termCard2.Left;
               showSwapTo();
           }
       }


       private void pb_myCard3_Click(object sender, EventArgs e)
       {
           if (playerMoves == true)
           {
               if (riseCards == true) { riseCards = false; } else { riseCards = true; }
               lowerAllCards("riseCard3");
               RisedCardLeft = pb_termCard3.Left;
               showSwapTo();
           }
       }


       private void pb_myCard4_Click(object sender, EventArgs e)
       {
           if (playerMoves == true)
           {
               if (riseCards == true) { riseCards = false; } else { riseCards = true; }
               lowerAllCards("riseCard4");
               RisedCardLeft = pb_termCard4.Left;
               showSwapTo();
           }
       }




/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// КЛИКАЕМ НА СТРЕЛКИ ОБМЕНА ////////////////////////////////////////////////


       private void pb_sw_Click(object sender, EventArgs e)
       {

           if (riseCard1 == "rised") { activeCard = 0; }
           if (riseCard2 == "rised") { activeCard = 1; }
           if (riseCard3 == "rised") { activeCard = 2; }
           if (riseCard4 == "rised") { activeCard = 3; }

           if (activeSwap == "Elvis") { Terminator.cards[activeCard] = Elvis.swapCards(Terminator.cards[activeCard]); }
           if (activeSwap == "Merilyn") { Terminator.cards[activeCard] = Merilyn.swapCards(Terminator.cards[activeCard]); }
           if (activeSwap == "Sherlock") { Terminator.cards[activeCard] = Sherlock.swapCards(Terminator.cards[activeCard]); }

           pb_sw.Visible = false;
           riseCards = true;


           showMyCards();


           lowerAllCards("");

           string winner = "";
           if (Terminator.checkIfWinner() == true) { winner = "Congratulations, YOU won!"; Terminator.score += 1; }
           if (Elvis.checkIfWinner() == true) { winner = "Elvis wins this round!"; Elvis.score += 1; }
           if (Merilyn.checkIfWinner() == true) { winner = "Merilyn wins this round!"; Merilyn.score += 1; }
           if (Sherlock.checkIfWinner() == true) { winner = "Sherlock wins this round!"; Sherlock.score += 1; }

           if (CheckWinners() == "" && checkBox2.Checked == false) //////// если никто не выиграл и другие игроки тоже принимают участие
           {
               checkBox2.Enabled = false;
               playerMoves = false; ///////// у игрока ход отнимает
               makeMoveElvis(); ////////// и передаём Элвису
           }


       }



//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////// проверяем, а может у нас есть победитель? //////////////////////


       private string CheckWinners()
       {
           string winner = "";
           if (Terminator.checkIfWinner() == true) { winner = "Congratulations, YOU won!"; Terminator.score += 1; }
           if (Elvis.checkIfWinner() == true) { winner = "Elvis wins this round!"; Elvis.score += 1; }
           if (Merilyn.checkIfWinner() == true) { winner = "Merilyn wins this round!"; Merilyn.score += 1; }
           if (Sherlock.checkIfWinner() == true) { winner = "Sherlock wins this round!"; Sherlock.score += 1; }

           if (winner != "")
           {
               turnLabel.Text = "";
               showAllCards();
               MessageBox.Show(winner, "Info", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
               if (checkBox1.Checked != true) { hideAllCards(); }
               checkBox2.Enabled = true;
               turnLabel.Text = "Your move.";
               playerMoves = true;
               clearCards();
               openNewDeck();
               showMyCards();
               scoreLabel.Text = "You: " + Convert.ToString(Terminator.score) + " | Elvis: " + Convert.ToString(Elvis.score) + " | Merilyn: " + Convert.ToString(Merilyn.score) + " | Sherlock: " + Convert.ToString(Sherlock.score);
           }

           return winner;

       }


//////////////////////////////////////////////////////////////////////////////////////////////////////////////

   }
}

///////////////////////////////////////////  ** * Ф С Ё * ** /////////////////////////////////////////////////

 

class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace goFish
{





   class players
   {

       public int score = 0;
       Random random = new Random();
       public List<CardType> cards = new List<CardType>();

       public bool checkIfWinner()
       {
           if (this.cards[0] == CardType.Clubs && this.cards[1] == CardType.Clubs && this.cards[2] == CardType.Clubs && this.cards[3] == CardType.Clubs) { return true; }
           if (this.cards[0] == CardType.Diamonds && this.cards[1] == CardType.Diamonds && this.cards[2] == CardType.Diamonds && this.cards[3] == CardType.Diamonds) { return true; }
           if (this.cards[0] == CardType.Hearts && this.cards[1] == CardType.Hearts && this.cards[2] == CardType.Hearts && this.cards[3] == CardType.Hearts) { return true; }
           if (this.cards[0] == CardType.Spades && this.cards[1] == CardType.Spades && this.cards[2] == CardType.Spades && this.cards[3] == CardType.Spades) { return true; }
           return false;
       }



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////// заменяем карту ///////////////////////////////////////////////////////////////////////////////////////////


       public void replaceCard(CardType cardToReplace, CardType cardRepaceWith)
       {
           for (int i = 0; i != 4; i++)
           {
               if (this.cards[i] == cardToReplace) { this.cards[i] = cardRepaceWith; }
           }
       }


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// крутой AI - мозги всей игры! //////////////////////////////////////////////////////////////////////////////////

       public CardType swapCards(CardType cardIn)
       {


           //////////////////////////////////////////// МЫ ДОЛЖНЫ ОПРЕДЕЛИТЬ, какую карту не жалко отдавать

           List<int> protect = new List<int>();
           int cardOutNum=0;

           for (int i = 0; i != 4; i++)
           {
               int compare = 0;
               if (this.cards[i] == this.cards[0]) { compare++; }
               if (this.cards[i] == this.cards[1]) { compare++; }
               if (this.cards[i] == this.cards[2]) { compare++; }
               if (this.cards[i] == this.cards[3]) { compare++; }

               if (compare >= 2) { protect.Add(i); }
           } //////////////////////// мы определили, сколько имеется одинаковых карт 


           if (protect.Count == 3) //////////// если есть 3 одинаковые, надо выдать ту, которая не одинаковая
           {
               if (!protect.Contains(0)) { cardOutNum = 0; }
               if (!protect.Contains(1)) { cardOutNum = 1; }
               if (!protect.Contains(2)) { cardOutNum = 2; }
               if (!protect.Contains(3)) { cardOutNum = 3; }
           }
           else if (protect.Count == 2) ////////////// если есть 2 одинаковые и 2 разные
           {
               List<int> cardOutList = new List<int>();
               if (!protect.Contains(0)) { cardOutList.Add(0); }
               if (!protect.Contains(1)) { cardOutList.Add(1); }
               if (!protect.Contains(2)) { cardOutList.Add(2); }
               if (!protect.Contains(3)) { cardOutList.Add(3); }

               int s = random.Next(0, 2);
               if (s == 0) { cardOutNum = cardOutList[0]; } ////// выдаём на дурочку одну из разных
               else { cardOutNum = cardOutList[1]; }

           }
           else { cardOutNum = random.Next(0, 4); } /////// если все разные или если 2 пары одинаковые, то выдаём любую на дурочку

           ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

           CardType cardOut = this.cards[cardOutNum];

           ///// если поступал реальная карта, то мы ею заменяем то, которую отдали
           ///// если нет, то данным метод просто определяет, какую карту будем отдавать
           if (cardIn != CardType.none)
           {
               this.cards[cardOutNum] = cardIn;
           }


           /////// выдаём результат
           return cardOut;

       }

       //////////////////////////////////////////////////////////////////////////////////////////////////////////////


   }


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



   enum CardType
   {
       Diamonds,
       Clubs,
       Spades,
       Hearts,
       none,
   }


}

 

P.S.

Spēlē mēdz būt gļuks - var parādīties 5 vienādas kārtis. No kurienes tas rodas nav skaidrs... bet ja kāds atradīs, tas būs malacis! :)

 

6b335d16a3f6.jpg

swapper.rar

Labots - BRT2008
  • Patīk 1
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...