找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
請尊重及感激所有版主付出和奉獻尊貴會員無限看帖不用回覆認識好友、聊天,分享生活趣事
蘿莉rion三上悠亜波多野結進擊的巨中文惡靈古堡
彼女の診出賣女友その後、蜥蜴王黃池ミニファ寢取

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]我獨自升級11-

[繁]最強肉盾的迷宮攻

[簡]北海道辣妹金古錐

[繁]最強肉盾的迷宮攻

【超清繁中】✡ 霹靂

[繁]最強肉盾的迷宮攻
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 4536|回復: 4

[求助] 作業求助[複製鏈接]

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
23
積分
2 點
潛水值
50380 米
發表於 2017-1-11 02:46 AM|顯示全部樓層
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
本帖最後由 zxc12589634 於 2017-1-11 02:48 AM 編輯

作業內容是終極密碼    但是最後一項規則是每局淘汰一名玩家 只留下最後一位贏家


如果只用if還有else  if的話要怎麼樣設計

這個是我目前的進度  遊戲整體來說算是完成了 就只差不知道怎麼處理淘汰玩家的部分  請各位大大指點
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 1

帖子
61
積分
49 點
潛水值
26590 米
發表於 2017-1-11 09:49 AM|顯示全部樓層
下面給您參考
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;

  9. namespace GuessNumber1
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         public Form1()
  14.         {
  15.             InitializeComponent();
  16.             groupBox1.Enabled = false;//groupBox1放猜數字的文字盒lblplayer及btnSend猜數字按鈕
  17.             btnBegin.Enabled = true;//開始遊戲的按鈕
  18.         }
  19.         List<Player> players = null;//遊戲者清單
  20.         Random r = null;
  21.         int num = 0;//系統產生猜的數字
  22.         int currentPlayer = 0;//目前遊戲者
  23.         int max = 25, min = 0;//上下限
  24.         private void btnBegin_Click(object sender, EventArgs e)//開始遊戲的按鈕
  25.         {
  26.             r = new Random();

  27.             //初始化遊戲者
  28.             players = new List<Player>();
  29.             for (int i = 0; i < 4; i++)
  30.             {
  31.                 players.Add(new Player() { Name = "玩家" + (i + 1).ToString() });
  32.             }
  33.             //亂數產生數字
  34.             num = r.Next(0, 26);
  35.             lblplayer.Text = players[0].Name;//顯示第一個猜數字的遊戲者
  36.             currentPlayer = 0;
  37.             txtMessage.Text = "";
  38.             groupBox1.Enabled = true;
  39.             btnBegin.Enabled = false;
  40.             
  41.         }
  42.         private void btnSend_Click(object sender, EventArgs e)//猜數字按鈕
  43.         {
  44.             int guessnum = Convert.ToInt32(txtGuess.Text);//猜的數字
  45.             if (guessnum < min|| guessnum>max)//猜的數字超過上下限
  46.             {
  47.                 MessageBox.Show("別鬧了!");
  48.                 return;
  49.             }
  50.             if (guessnum == num)
  51.             {
  52.                 MessageBox.Show(players[currentPlayer].Name + "您輸了!");
  53.                 txtMessage.Text += players[currentPlayer].Name + "您輸了!" + Environment.NewLine;
  54.                 Player p = players[currentPlayer];
  55.                 players.Remove(p);//移除輸的遊戲者

  56.                 if (players.Count == 1)//若只剩一位遊戲者則遊戲結束
  57.                 {
  58.                     MessageBox.Show(players[0].Name + "您贏了!");
  59.                     txtMessage.Text += players[0].Name + "您贏了!";
  60.                     groupBox1.Enabled = false;
  61.                     btnBegin.Enabled = true;
  62.                     return;
  63.                 }
  64.                 //有遊戲者輸了,重新產生猜的數字
  65.                 num = r.Next(0, 26);
  66.                 max = 25;
  67.                 min = 0;
  68.                 lblplayer.Text = players[0].Name;//顯示第一個猜數字的遊戲者
  69.                 currentPlayer = 0;
  70.                 return;
  71.             }
  72.             else if(guessnum<num)//猜的數字小於答案,下限等於猜的數字
  73.             {
  74.                 min = guessnum;
  75.             }
  76.             else if (guessnum > num)//猜的數字大於答案,上限等於猜的數字
  77.             {
  78.                 max = guessnum;
  79.             }
  80.             //顯示上下限
  81.             txtMessage.Text += string.Format("{0}~{1}", min, max)+Environment.NewLine;
  82.             currentPlayer += 1;//換下一個遊戲者
  83.             if (currentPlayer > players.Count - 1) currentPlayer = 0;
  84.             lblplayer.Text = players[currentPlayer].Name;//顯示目前猜數字的遊戲者

  85.         }
  86.         //遊戲者類別
  87.         class Player
  88.         {
  89.             public string Name { get; set; }
  90.         }

  91.         
  92.     }
  93. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 1

帖子
76
積分
193 點
潛水值
4402 米
發表於 2017-1-14 02:58 PM|顯示全部樓層
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
本帖最後由 跨越青春嶺 於 2017-1-15 10:33 AM 編輯


給你參考參考,有疑問這邊一起討論,或覺得我哪裡可以改進請跟我說~~~

終極密碼可以拆獨立一個Class,那我命名為DaVinciCode.cs,這樣才有符合單一職責
  1. using System;

  2. namespace HW_11206480
  3. {
  4.     public class DaVinciCode
  5.     {
  6.         private int _min;

  7.         private int _max;

  8.         private int _maximumLimit;

  9.         private int _boomNumber;

  10.         private static DaVinciCode _instance = null;

  11.         public static DaVinciCode Instance
  12.         {
  13.             get
  14.             {
  15.                 if (_instance == null)
  16.                 {
  17.                     _instance = new DaVinciCode();
  18.                 }
  19.                 return _instance;
  20.             }
  21.         }

  22.         public void BoomNumberInit()
  23.         {
  24.             var random = new Random(Guid.NewGuid().GetHashCode());
  25.             _min = 0;
  26.             _max = _maximumLimit;
  27.             _boomNumber = random.Next(_min, _max);
  28.         }

  29.         public DaVinciCodeResult Guess(int guessNumber)
  30.         {
  31.             var result = DaVinciCodeResult.None;

  32.             if (guessNumber >= _max || guessNumber <= _min)
  33.             {
  34.                 result = DaVinciCodeResult.ErrorRange;
  35.             }
  36.             else if (guessNumber == _boomNumber)
  37.             {
  38.                 result = DaVinciCodeResult.Boom;
  39.             }
  40.             else
  41.             {
  42.                 _min = guessNumber < _boomNumber ? guessNumber : _min;
  43.                 _max = guessNumber > _boomNumber ? guessNumber : _max;
  44.             }

  45.             return result;
  46.         }

  47.         public string GetRange()
  48.         {
  49.             return $"{_min}~{_max}";
  50.         }

  51.         public void SetMaximumLimit(int maximumLimit)
  52.         {
  53.             _maximumLimit = maximumLimit;
  54.         }
  55.     }

  56.     public enum DaVinciCodeResult
  57.     {
  58.         ErrorRange,
  59.         Boom,
  60.         None
  61.     }
  62. }
複製代碼
選手呢,就很簡單,Player.cs
  1. namespace HW_11206480
  2. {
  3.     public class Player
  4.     {
  5.         public string Name { get; set; }
  6.     }
  7. }
複製代碼
接下來就是主程式Main.cs部分,很多很長,但我想應該就只能這樣了?再進步也沒多少了...
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Forms;

  5. namespace HW_11206480
  6. {
  7.     public partial class Main : Form
  8.     {
  9.         private List<Player> _players = null;

  10.         public Main()
  11.         {
  12.             InitializeComponent();
  13.             DaVinciCode.Instance.SetMaximumLimit(999);
  14.             PlayersInit();
  15.             btnSendNumber.Enabled = false;
  16.             btnStart.Enabled = true;
  17.         }

  18.         private void PlayersInit()
  19.         {
  20.             _players = new List<Player>();
  21.             for (int i = 1; i <= 3; i++)
  22.             {
  23.                 _players.Add(new Player()
  24.                 {
  25.                     Name = $"玩家{i}"
  26.                 });
  27.             }
  28.             lblPlayerName.Text = _players.First().Name;
  29.             DaVinciCode.Instance.BoomNumberInit();
  30.         }

  31.         private void btnGuessNumber_Click(object sender, EventArgs e)
  32.         {
  33.             var currentPlayer = lblPlayerName.Text;

  34.             var guessNumber = Convert.ToInt32(txtGuessNumber.Text);
  35.             var result = DaVinciCode.Instance.Guess(guessNumber);

  36.             Player removePlayer = null;

  37.             if (result == DaVinciCodeResult.Boom)
  38.             {
  39.                 txtMessage.Text = string.Concat($"{currentPlayer}您輸了!{Environment.NewLine}", txtMessage.Text);
  40.                 removePlayer = _players.Where(p => p.Name == currentPlayer).FirstOrDefault();
  41.                 txtGuessNumber.Text = string.Empty;
  42.                 DaVinciCode.Instance.BoomNumberInit();
  43.             }
  44.             else if (result == DaVinciCodeResult.ErrorRange)
  45.             {
  46.                 txtMessage.Text = string.Concat($"請輸入合法範圍!{Environment.NewLine}", txtMessage.Text);
  47.                 txtGuessNumber.Text = string.Empty;
  48.                 return;
  49.             }

  50.             lblPlayerName.Text = _players.SkipWhile(p => p.Name != currentPlayer).Skip(1).FirstOrDefault()?.Name;
  51.             if (removePlayer != null)
  52.             {
  53.                 _players.Remove(removePlayer);
  54.             }

  55.             if (lblPlayerName.Text == string.Empty)
  56.             {
  57.                 lblPlayerName.Text = _players.FirstOrDefault().Name;
  58.             }

  59.             if (_players.Count == 1)
  60.             {
  61.                 txtMessage.Text = string.Concat($"{lblPlayerName.Text}獲勝!{Environment.NewLine}", txtMessage.Text);
  62.                 btnSendNumber.Enabled = false;
  63.                 btnStart.Enabled = true;
  64.                 btnStart.Text = "重新開始";
  65.             }
  66.             else
  67.             {
  68.                 txtMessage.Text = string.Concat($"範圍:{DaVinciCode.Instance.GetRange()}{Environment.NewLine}", txtMessage.Text);
  69.             }
  70.         }

  71.         private void btnStart_Click(object sender, EventArgs e)
  72.         {
  73.             btnSendNumber.Enabled = true;
  74.             btnStart.Enabled = false;
  75.             if (btnStart.Text == "開始")
  76.             {
  77.                 btnStart.Text = "重新開始";
  78.             }
  79.             else if (btnStart.Text == "重新開始")
  80.             {
  81.                 PlayersInit();
  82.             }
  83.             txtMessage.Text = string.Concat($"範圍:{DaVinciCode.Instance.GetRange()}{Environment.NewLine}", txtMessage.Text);
  84.         }
  85.     }
  86. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

Rank: 1

帖子
61
積分
49 點
潛水值
26590 米
發表於 2017-1-15 12:03 PM|顯示全部樓層
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
因上下限也可能是終極密碼,若未被猜過遊戲者是可以猜的,下面是修正的程式,
並將遊戲邏輯另建一個類別來處理,這個類別將扮演莊家的角色,另外遊戲也改為下一局從被淘汰的遊戲者的下一位遊戲者開始

首先建立玩家類別
  1. public class Player
  2. {
  3.         public string Name { get; set; }
  4. }
複製代碼
建立比對結果的列舉
  1. public enum Result
  2. {
  3.         Out, //淘汰(猜中數字)
  4.         OutOfRange,//猜的數字超過上下限
  5.         Normal //未猜中(數字在上下限之間)
  6. }
複製代碼
建立扮演莊家的類別
  1. public class Game//相當莊家(BOOKIEnoun)角色
  2. {
  3.         Random r = null;
  4.         int max = 99, min = 0;//上下限
  5.         int num = 0;
  6.         //nums放猜過的數字以避免猜重複的數字
  7.         /*
  8.          * 因上下限也可能是終極密碼,
  9.          * 若未被猜過遊戲者是可以猜的,
  10.          * 所以利用nums存猜過的數字並於每一局開始時清空
  11.          * **/
  12.         List<int> nums = null;
  13.         public Game(int min, int max)
  14.         {
  15.             this.max = max;
  16.             this.min = min;
  17.             r = new Random();
  18.             GetNum(min,max);
  19.         }
  20.         public void GetNum(int min, int max)
  21.         {
  22.             nums = new List<int>();
  23.             this.max = max;
  24.             this.min = min;
  25.             //亂數產生數字
  26.             num = r.Next(min, max + 1);
  27.         }
  28.         public Result Guess(string playerName,int guessnum, out string msg)
  29.         {
  30.             if (guessnum < min || guessnum > max)//猜的數字超過上下限
  31.             {
  32.                 msg = "別鬧了!" + string.Format("數字介於{0}~{1}之間", min, max); ;
  33.                 return Result.OutOfRange;
  34.             }
  35.             if (guessnum == num)
  36.             {
  37.                 msg = playerName + "您輸了!!";
  38.                 return Result.Out;
  39.             }
  40.             if (nums.Contains(guessnum))
  41.             {
  42.                 msg ="數字已有人猜過!!";
  43.                 return Result.OutOfRange;
  44.             }
  45.             if (guessnum < num)//猜的數字小於答案,下限等於猜的數字
  46.             {
  47.                 min = guessnum;
  48.             }
  49.             if (guessnum > num)//猜的數字大於答案,上限等於猜的數字
  50.             {
  51.                 max = guessnum;
  52.             }
  53.             nums.Add(guessnum);
  54.             msg = string.Format("數字介於{0}~{1}之間", min, max);
  55.             return Result.Normal;
  56.         }
  57. }
複製代碼
主程式
  1. namespace GuessNumber2
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         List<Player> players = null;//遊戲者清單
  6.         int currentPlayer = 0;//目前遊戲者
  7.         int max = 25, min = 0;//上下限
  8.         public Form1()
  9.         {
  10.             InitializeComponent();
  11.             groupBox1.Enabled = false;//groupBox1放猜數字的文字盒(TextBox)txtGuess及btnSend猜數字按鈕
  12.             btnBegin.Enabled = true;//開始遊戲的按鈕
  13.         }
  14.         Game game = null;
  15.         //開始新遊戲
  16.         private void btnBegin_Click(object sender, EventArgs e)
  17.         {
  18.             //初始化遊戲者
  19.             players = new List<Player>();
  20.             for (int i = 0; i < 4; i++)
  21.             {
  22.                 players.Add(new Player() { Name = "玩家" + (i + 1).ToString() });
  23.             }
  24.             lblplayer.Text = players[0].Name;//顯示第一個猜數字的遊戲者
  25.             currentPlayer = 0;
  26.             game = new Game(min, max);//建立新遊戲
  27.             //txtMessage控制項是一個TextBox顯示訊息
  28.             txtMessage.Text = "";
  29.             groupBox1.Enabled = true;
  30.             btnBegin.Enabled = false;
  31.         }
  32.         //猜數字(txtGuess及btnSend在groupBox1裡面)
  33.         private void btnSend_Click(object sender, EventArgs e)
  34.         {
  35.             int guessnum = Convert.ToInt32(txtGuess.Text);//猜的數字
  36.             string msg = string.Empty;//接收訊息
  37.             //比對猜的數字
  38.             Result result = game.Guess(players[currentPlayer].Name, guessnum, out msg);
  39.             if (result == Result.OutOfRange)//猜的數字超過上下限
  40.             {
  41.                 MessageBox.Show(msg);
  42.                 return;
  43.             }
  44.             else if (result == Result.Out)//猜中數字
  45.             {
  46.                 MessageBox.Show(msg);
  47.                 txtMessage.Text += msg + Environment.NewLine;
  48.                 players.Remove(players.Where(p=>p==players[currentPlayer]).FirstOrDefault());//移除輸的遊戲者

  49.                 if (players.Count == 1)//若只剩一位遊戲者則遊戲結束
  50.                 {
  51.                     MessageBox.Show(players[0].Name + "您贏了!");
  52.                     txtMessage.Text += players[0].Name + "您贏了!" + Environment.NewLine; ;
  53.                     groupBox1.Enabled = false;
  54.                     btnBegin.Enabled = true;
  55.                     return;
  56.                 }
  57.                 //有遊戲者輸了,重新產生猜的數字,進入下一局
  58.                 game.GetNum(min, max);
  59.                 //lblplayer.Text = players[0].Name;//顯示下一局第一位猜數字的遊戲者
  60.                 //currentPlayer = 0;
  61.             }
  62.             else
  63.             {
  64.                 //顯示上下限
  65.                 txtMessage.Text += msg + Environment.NewLine;
  66.                 currentPlayer += 1;//換下一個遊戲者
  67.             }
  68.             if (currentPlayer > players.Count - 1) currentPlayer = 0;
  69.             lblplayer.Text = players[currentPlayer].Name;//顯示目前猜數字的遊戲者
  70.         }
  71.     }
  72. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 1

帖子
76
積分
193 點
潛水值
4402 米
發表於 2017-1-16 08:22 PM|顯示全部樓層
本帖最後由 跨越青春嶺 於 2017-1-19 08:54 PM 編輯

下載: 訪客無法瀏覽下載點,請先 註冊登入會員


  1. using System;
  2. using System.Collections.Generic;
  3. using DaVinciCode.Enum;

  4. namespace DaVinciCode.Helper
  5. {
  6.     public class DaVinciCodeHepler
  7.     {
  8.         private int _min;

  9.         private int _max;

  10.         private int _maximumLimit;

  11.         private int _boomNumber;

  12.         private List<int> _upperAndLowerLimits = new List<int>();

  13.         private static DaVinciCodeHepler _instance = null;

  14.         public static DaVinciCodeHepler Instance
  15.         {
  16.             get
  17.             {
  18.                 if (_instance == null)
  19.                 {
  20.                     _instance = new DaVinciCodeHepler();
  21.                 }
  22.                 return _instance;
  23.             }
  24.         }

  25.         public void BoomNumberInit()
  26.         {
  27.             var random = new Random(Guid.NewGuid().GetHashCode());
  28.             _min = 0;
  29.             _max = _maximumLimit;
  30.             _boomNumber = random.Next(_min, _max);
  31.             _upperAndLowerLimits = new List<int> {
  32.                 _min, _max
  33.             };
  34.         }

  35.         public DaVinciCodeResult Guess(int guessNumber)
  36.         {
  37.             var result = DaVinciCodeResult.None;

  38.             if ((guessNumber >= _max || guessNumber <= _min) && (!_upperAndLowerLimits.Contains(guessNumber)))
  39.             {
  40.                 result = DaVinciCodeResult.ErrorRange;
  41.             }
  42.             else if (guessNumber == _boomNumber)
  43.             {
  44.                 result = DaVinciCodeResult.Boom;
  45.             }
  46.             else
  47.             {
  48.                 _min = guessNumber < _boomNumber ? guessNumber : _min;
  49.                 _max = guessNumber > _boomNumber ? guessNumber : _max;
  50.                 if (guessNumber < _boomNumber)
  51.                 {
  52.                     _upperAndLowerLimits.RemoveAll(limit => limit <= guessNumber);
  53.                 }
  54.                 else if (guessNumber > _boomNumber)
  55.                 {
  56.                     _upperAndLowerLimits.RemoveAll(limit => limit >= guessNumber);
  57.                 }
  58.             }
  59.             return result;
  60.         }

  61.         public string GetRange()
  62.         {
  63.             return $"{_min}~{_max}";
  64.         }

  65.         public void SetMaximumLimit(int maximumLimit)
  66.         {
  67.             _maximumLimit = maximumLimit;
  68.         }
  69.     }
  70. }
複製代碼


...
瀏覽完整內容,請先 註冊登入會員





附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部