http://wiki.linuxformat.ru/wiki/index.php?title=LXF92:Mono&feed=atom&action=historyLXF92:Mono - История изменений2024-03-29T06:36:03ZИстория изменений этой страницы в викиMediaWiki 1.19.20+dfsg-0+deb7u3http://wiki.linuxformat.ru/wiki/index.php?title=LXF92:Mono&diff=5560&oldid=prevCrazy Rebel: оформление2008-11-24T08:17:22Z<p>оформление</p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 08:17, 24 ноября 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 258:</td>
<td colspan="2" class="diff-lineno">Строка 258:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>выглядеть вот так:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>выглядеть вот так:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   int playernum = 0;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   int playernum = 0;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   while (Cards.Count > 0) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   while (Cards.Count > 0) {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 270:</td>
<td colspan="2" class="diff-lineno">Строка 270:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     RemovePlayerPairs(i);</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     RemovePlayerPairs(i);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>В последней части (от комментариев и ниже) уже начинается логи</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>В последней части (от комментариев и ниже) уже начинается логи</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 281:</td>
<td colspan="2" class="diff-lineno">Строка 281:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>у него парные карты. Чтобы облегчить понимание, я разделил функцию на две, вот так:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>у него парные карты. Чтобы облегчить понимание, я разделил функцию на две, вот так:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  void RemovePlayerPairs(int player) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  void RemovePlayerPairs(int player) {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     while (TryPairRemove(player)) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     while (TryPairRemove(player)) {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 287:</td>
<td colspan="2" class="diff-lineno">Строка 287:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Итак, номер игрока поступает в функцию и передается методу</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Итак, номер игрока поступает в функцию и передается методу</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 298:</td>
<td colspan="2" class="diff-lineno">Строка 298:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>удалить пару и вернуть '''true'''.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>удалить пару и вернуть '''true'''.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   bool TryPairRemove(int player) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   bool TryPairRemove(int player) {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>       Card card1;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>       Card card1;</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 319:</td>
<td colspan="2" class="diff-lineno">Строка 319:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     return false;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     return false;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Некоторые комментарии по коду:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Некоторые комментарии по коду:</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 358:</td>
<td colspan="2" class="diff-lineno">Строка 358:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|Ширина=200px}}</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|Ширина=200px}}</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  bool finished = false;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  bool finished = false;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  while (!finished) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  while (!finished) {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 368:</td>
<td colspan="2" class="diff-lineno">Строка 368:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>                 continue;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>                 continue;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь отслеживается число игроков, оставшихся в игре. Если это</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь отслеживается число игроков, оставшихся в игре. Если это</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 374:</td>
<td colspan="2" class="diff-lineno">Строка 374:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>цикл просто обрабатывает каждого игрока.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>цикл просто обрабатывает каждого игрока.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int playertouse = -1;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int playertouse = -1;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  for (int j = i + 1; j < Players.Count; ++j) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  for (int j = i + 1; j < Players.Count; ++j) {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 390:</td>
<td colspan="2" class="diff-lineno">Строка 390:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Этот блок ищет игрока, у которого нужно вытянуть карту: сперва</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Этот блок ищет игрока, у которого нужно вытянуть карту: сперва</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 396:</td>
<td colspan="2" class="diff-lineno">Строка 396:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>автоматически пропускаются.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>автоматически пропускаются.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">/code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (playertouse == i) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (playertouse == i) {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     finished = true;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     finished = true;</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 409:</td>
<td colspan="2" class="diff-lineno">Строка 409:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Теперь начинается самое интересное: если мы добрались сами</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Теперь начинается самое интересное: если мы добрались сами</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 416:</td>
<td colspan="2" class="diff-lineno">Строка 416:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''RemovePlayerPairs()''', для сброса подходящей пары.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''RemovePlayerPairs()''', для сброса подходящей пары.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   if (playersleft == 1) finished = true;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   if (playersleft == 1) finished = true;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   PrintResults();</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   PrintResults();</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Наконец, если игроков не осталось, завершаем цикл. Игра закончена, и '''PrintResult()''' выдает сообщение:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Наконец, если игроков не осталось, завершаем цикл. Игра закончена, и '''PrintResult()''' выдает сообщение:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   void PrintResults() {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   void PrintResults() {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>       Console.WriteLine(“”);</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>       Console.WriteLine(“”);</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 434:</td>
<td colspan="2" class="diff-lineno">Строка 434:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Если вы запустите программу, то увидите четырех компьютерных</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Если вы запустите программу, то увидите четырех компьютерных</div></td></tr>
</table>Crazy Rebelhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF92:Mono&diff=5559&oldid=prevCrazy Rebel: /* Устанавливаем игру */ оформление2008-11-24T08:14:57Z<p><span dir="auto"><span class="autocomment">Устанавливаем игру: </span> оформление</span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 08:14, 24 ноября 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 210:</td>
<td colspan="2" class="diff-lineno">Строка 210:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>вить карты будет перебрать в цикле все масти ('''Suits''), и для каждой масти посчитать от одного до 13 так, чтобы получить все от тузов до королей [туз считается единицей]. Добавив все карты и всех игроков, завершаем установку, вызывая метод '''ShuffleCards()''' для перетасовки карт.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>вить карты будет перебрать в цикле все масти ('''Suits''), и для каждой масти посчитать от одного до 13 так, чтобы получить все от тузов до королей [туз считается единицей]. Добавив все карты и всех игроков, завершаем установку, вызывая метод '''ShuffleCards()''' для перетасовки карт.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  foreach (Suits suit in Enum.GetValues(typeof(Suits))) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  foreach (Suits suit in Enum.GetValues(typeof(Suits))) {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     for (int i = 1; i < 14; ++i) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     for (int i = 1; i < 14; ++i) {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 225:</td>
<td colspan="2" class="diff-lineno">Строка 225:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  ShuffleCards();</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  ShuffleCards();</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Вы видите, что надо вызвать просто '''Cards.Add(card)''', чтобы вставить карту в список из '''Cards'''; все очень просто. Метод '''ShuffleCards()''' пока ничего не делает, потому что он пустой. Нам необходимо пройтись по всему массиву '''Cards''', вытащить отдельные карты и поместить их обратно в произвольную позицию. Тут не обойтись без генератора</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Вы видите, что надо вызвать просто '''Cards.Add(card)''', чтобы вставить карту в список из '''Cards'''; все очень просто. Метод '''ShuffleCards()''' пока ничего не делает, потому что он пустой. Нам необходимо пройтись по всему массиву '''Cards''', вытащить отдельные карты и поместить их обратно в произвольную позицию. Тут не обойтись без генератора</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>случайных чисел – вставьте эту строку перед '''static void Main''':</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>случайных чисел – вставьте эту строку перед '''static void Main''':</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  Random Rand = new Random();</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  Random Rand = new Random();</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Теперь полная реализация '''ShuffleCards()''':</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Теперь полная реализация '''ShuffleCards()''':</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  void ShuffleCards() {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  void ShuffleCards() {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   for (int i = 0; i < Cards.Count; ++i) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   for (int i = 0; i < Cards.Count; ++i) {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 244:</td>
<td colspan="2" class="diff-lineno">Строка 244:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь показано несколько новых возможностей списков: у них есть</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь показано несколько новых возможностей списков: у них есть</div></td></tr>
</table>Crazy Rebelhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF92:Mono&diff=5558&oldid=prevCrazy Rebel: /* Введение в обобщенные типы */2008-11-24T08:12:12Z<p><span dir="auto"><span class="autocomment">Введение в обобщенные типы</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 08:12, 24 ноября 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 161:</td>
<td colspan="2" class="diff-lineno">Строка 161:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>любого типа, то вам всегда придется сообщать ''Mono'', какой тип используется. Например:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>любого типа, то вам всегда придется сообщать ''Mono'', какой тип используется. Например:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int i = 1;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int i = 1;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  ArrayList numbers = new ArrayList();</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  ArrayList numbers = new ArrayList();</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  numbers.Add(i);</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  numbers.Add(i);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int j = numbers[0];</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int j = numbers[0];</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь будет ошибка – ''Mono'' не сможет преобразовать '''numbers[0]'''</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь будет ошибка – ''Mono'' не сможет преобразовать '''numbers[0]'''</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 172:</td>
<td colspan="2" class="diff-lineno">Строка 172:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>надо написать:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>надо написать:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int j = (int)numbers[0];</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int j = (int)numbers[0];</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Префикс '''(int)''' значит «обращаться с '''numbers[0]''' как с целым числом», и наш код будет компилироваться правильно. Новые версии ''C#'', включая поставляемую с Fedora Core 6, поддерживает новый способ</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Префикс '''(int)''' значит «обращаться с '''numbers[0]''' как с целым числом», и наш код будет компилироваться правильно. Новые версии ''C#'', включая поставляемую с Fedora Core 6, поддерживает новый способ</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 190:</td>
<td colspan="2" class="diff-lineno">Строка 190:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Добавьте такие две строчки сразу под строкой '''class Geno''':</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Добавьте такие две строчки сразу под строкой '''class Geno''':</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  List<Card> Cards = new List<Card>();</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  List<Card> Cards = new List<Card>();</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  List<Player> Players = new List<Player>();</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  List<Player> Players = new List<Player>();</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Этот синтаксис может затуманить мозги, но по-простому он гласит</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Этот синтаксис может затуманить мозги, но по-простому он гласит</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 199:</td>
<td colspan="2" class="diff-lineno">Строка 199:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>список содержал переменные типа '''Players'''». Вы также должны добавить строку до переменной '''Score''' в классе '''Player''':</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>список содержал переменные типа '''Players'''». Вы также должны добавить строку до переменной '''Score''' в классе '''Player''':</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  public List<Card> Cards = new List<Card>();</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  public List<Card> Cards = new List<Card>();</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Устанавливаем игру===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Устанавливаем игру===</div></td></tr>
</table>Crazy Rebelhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF92:Mono&diff=5557&oldid=prevCrazy Rebel: /* Описываем игру */ оформление2008-11-24T08:11:19Z<p><span dir="auto"><span class="autocomment">Описываем игру: </span> оформление</span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 08:11, 24 ноября 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 113:</td>
<td colspan="2" class="diff-lineno">Строка 113:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''Clubs''' – трефы, они же крести, '''Spades''' – пики, '''Player''' – игрок, англ.]:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''Clubs''' – трефы, они же крести, '''Spades''' – пики, '''Player''' – игрок, англ.]:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  using System;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  using System;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  namespace Geno {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  namespace Geno {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 135:</td>
<td colspan="2" class="diff-lineno">Строка 135:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ну да, знаю, здесь куча пустых методов, но они проясняют структуру программы. Заметили, что мне пришлось объявить все переменные</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ну да, знаю, здесь куча пустых методов, но они проясняют структуру программы. Заметили, что мне пришлось объявить все переменные</div></td></tr>
</table>Crazy Rebelhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF92:Mono&diff=5556&oldid=prevCrazy Rebel: /* Классификация объектов */ оформление2008-11-24T08:10:42Z<p><span dir="auto"><span class="autocomment">Классификация объектов: </span> оформление</span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 08:10, 24 ноября 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 22:</td>
<td colspan="2" class="diff-lineno">Строка 22:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>дите, что ''MonoDevelop'' напишет код по умолчанию:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>дите, что ''MonoDevelop'' напишет код по умолчанию:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><<ins class="diffchange diffchange-inline">source lang=csharp</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  class MainClass</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  class MainClass</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 30:</td>
<td colspan="2" class="diff-lineno">Строка 30:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div></<del class="diffchange diffchange-inline">code</del>></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></<ins class="diffchange diffchange-inline">source</ins>></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь применяется ООП, и программа отлично работает, даже</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь применяется ООП, и программа отлично работает, даже</div></td></tr>
</table>Crazy Rebelhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF92:Mono&diff=5421&oldid=prevCrazy Rebel: Новая: Категория:Учебники {{Цикл/Mono}} : '''Mono-Мания''' Программирование на современной платформе для новичков ...2008-11-19T05:06:17Z<p>Новая: <a href="/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%D0%B8" title="Категория:Учебники">Категория:Учебники</a> {{Цикл/Mono}} : '''Mono-Мания''' Программирование на современной платформе для новичков ...</p>
<p><b>Новая страница</b></p><div>[[Категория:Учебники]]<br />
{{Цикл/Mono}}<br />
: '''Mono-Мания''' Программирование на современной платформе для новичков<br />
<br />
==Mono: Объекты и обобщенные типы==<br />
<br />
: Объектно-ориентированное программирование кое-кого пугает больше, чем школьников прививки, но '''Пол Хадсон''' собирается обойтись без боли.<br />
<br />
В теории, теория и практика совпадают, но на практике так бывает редко. Вот почему в наших уроках обучение строится на процессе выполнения: если вы читали этот учебник с самого начала,<br />
то уже сделали пять полноценных приложений, решающих реальные<br />
задачи. На данном уроке я хочу отойти от принятой формулы и обсудить довольно сложную теорию программирования: объектно-ориентированное программирование (ООП) и обобщенные типы.<br />
<br />
Это не штуки, из которых можно делать свои приложения, а просто методы, которые пригодятся вам при программировании на Mono.<br />
Коль скоро вы это поняли, я покажу вам, как реализовать карточную игру с помощью названных двух методов.<br />
<br />
===Классификация объектов===<br />
<br />
ООП позволяет определять предметы в вашем программном коде и<br />
даже придавать им желаемое поведение. Вы уже использовали ООП,<br />
только не догадывались об этом. Создайте новый проект с именем<br />
'''Geno''' (еще один редкий персонаж Nintendo – уж простите!), и вы уви-<br />
дите, что ''MonoDevelop'' напишет код по умолчанию:<br />
<br />
<code><br />
class MainClass<br />
{<br />
public static void Main(string[] args)<br />
{<br />
Console.WriteLine(“Hello World!”);<br />
}<br />
}<br />
</code><br />
<br />
Здесь применяется ООП, и программа отлично работает, даже<br />
если вы не понимаете, что это значит (да и знать не хотите). Но теперь<br />
знайте: класс – это определение предмета, а объект – это экземпляр<br />
предмета. Ясно как ночь? Так вот: на вопросы «Какого цвета машина?»,<br />
«Какая длина у машины?» или «Сколько у машины передач?» ответ<br />
будет «это зависит от»: что такое машина, представляют все, но каждая<br />
машина индивидуальна.<br />
<br />
В терминах ООП, «машина» является классом. Но «машину вообще» увидеть нельзя: это абстрактное понятие. На самом деле мы<br />
видим «Форды», «Хонды» и так далее, то есть физические реализации<br />
класса «машина». Итак: машина, находящаяся на шоссе, это объект<br />
класса «машина». У нее есть цвет, длина, и вы знаете, сколько у нее<br />
передач, но это просто переменные свойства класса «машина». Другие<br />
машины, даже той марки, что и ваша, могут сильно отличаться; но все<br />
они машины.<br />
<br />
Если для вас это все еще пустой звук, подождите: вы все поймете из кода! А пока ''MonoDevelop'' определил для нас класс '''MainClass''', содержащий метод '''public static void Main()''', который мы все время<br />
используем. Два странных слова – '''public''' и '''static''' – относятся к ООП.<br />
<br />
===Объект Geno===<br />
<br />
Измените '''MainClass''' на '''Geno''', имя нашего проекта. Теперь замените<br />
строку '''Console.WriteLine()''' на следующую:<br />
<br />
<code><br />
Geno game = new Geno();<br />
</code><br />
<br />
Этот код создает объект класса '''Geno''' и присваивает его переменной '''game'''. Что представляет собой класс '''Geno'''? В данный момент он<br />
содержит только '''Main()''' и больше ничего – это просто пустая переменная. Но она рождает интересный вопрос: строка находится внутри<br />
метода '''Main()''', который находится внутри класса '''Geno'''. Как может '''Geno'''<br />
создать сам себя? Или – основной вопрос философии: что появилось<br />
раньше, класс '''Geno''' или метод '''Main()'''?<br />
<br />
Тут на помощь приходит слово '''‘static’''' – статический. Метод '''Main()''',<br />
если вы помните, помечен как '''public static void''', и на то есть причина: статические методы могут вызываться без экземпляра класса. Фактически они привязывают метод к классу, просто в организационных целях. Например, если в нашем классе был метод '''СменитьПередачу()''', его применение не имело бы смысла без конкретного экземпляра машины, так как в противном случае, какую передачу надо менять? А как насчет вычисления тормозного пути машины, мчащейся со скоростью 100 км/ч? К машинам это имеет отношение, ноясно, что для этого не требуется реальный объект машины.<br />
<br />
Таким образом, статический метод '''Main()''' может вызываться без<br />
существования класса '''Geno''', и мы используем его для создания объекта '''Geno''' так, чтобы можно было играть в карточную игру. Объект '''Geno''' будет контролировать все аспекты игры, поэтому других объектов нам<br />
не понадобится. Но, ради интереса, мы добавим еще два класса: один<br />
будет отвечать за игроков, другой за карты. Логика отдается на откуп<br />
объекту '''Geno''', так что классы игрока и карт предназначены просто для<br />
хранения данных.<br />
<br />
Есть еще кое-что, что вам надо знать, прежде чем писать код.<br />
Иногда нужно, чтобы переменная принимала значение только из определенного набора. Например, набор данных для дней недели – воскресенье, понедельник, вторник и т.д. Для карточной игры требуется, чтобы каждая карта была определенной масти: червы, бубны, трефы или пики. C# позволяет определить масти карт как перечисление:<br />
<br />
<code><br />
public enum Suits { Hearts, Diamonds, Clubs, Spades };<br />
</code><br />
<br />
===Описываем игру===<br />
<br />
Запрограммируем детскую игру: она, возможно, знакома вам как<br />
«Дама червей». Из карточной колоды извлекается одна дама (бубен),<br />
остается 51 карта. Карты сдаются всем игрокам, втемную. Игроки смотрят на свои карты и сбрасывают пары карт одинакового достоинства:<br />
например, если у игрока есть две десятки, то он кладет эти две десятки<br />
на стол. Дама червей не может быть использована как парная карта;<br />
игрок, которому она досталась, должен ее сохранить.<br />
<br />
После того, как все игроки выкинули свои пары, первый игрок<br />
поворачивается к игроку справа и втемную забирает у него произвольную карту. Если в результате у игрока образовались парные<br />
карты, то он может их сбросить. Игра продолжается, и второй игрок<br />
поворачивается к игроку справа и вынимает карту – и так далее. В<br />
конечном счете, каждая карта должна найти себе пару, за исключением дамы червей, а игрок, у которого она на руках, проигрывает. ['''порусски эта игра называется «Акулина» или «Акулька», но непарная дама – пиковая, – прим.ред.''']<br />
<br />
Нам надо предусмотреть следующие функции:<br />
* '''Play()''' Эта функция начинает игру, после проведения необходимых настроек.<br />
* '''ShuffleCards()''' Перетасовать колоду (рандомизировать порядок карт).<br />
* '''RemovePlayerPairs()''' Поиск и удаление подходящей пары карты у игрока.<br />
* '''PrintResult()''' Печать результатов игры (у кого осталась червонная дама).<br />
<br />
{{Врезка<br />
|Заголовок=Важное замечание<br />
|Содержание=При работе с MonoDevelop проверьте, что он использует среду .NET 2.0, в противном случае столкнетесь с проблемами. Вам надо изменить настройки для каждого проекта – выберите Project > Options, затем выберите категорию Runtime Options и установите среду выполнения на 2.0, а не 1.1..<br />
|Ширина=200px}}<br />
<br />
Также потребуется определить классы '''Player''' и '''Card''', которые будут<br />
содержать информацию. Вот скелет будущего кода [для большей ясности: '''Suit''' – масть, '''Card''' – карта, '''Hearts''' – черви, '''Diamonds''' – бубны,<br />
'''Clubs''' – трефы, они же крести, '''Spades''' – пики, '''Player''' – игрок, англ.]:<br />
<br />
<code><br />
using System;<br />
namespace Geno {<br />
enum Suits { Hearts, Diamonds, Clubs, Spades };<br />
class Card {<br />
public int Val;<br />
public Suits Suit;<br />
}<br />
class Player {<br />
public int Score;<br />
}<br />
class Geno {<br />
static void Main(string[] args) {<br />
Geno game = new Geno();<br />
game.Play();<br />
}<br />
void Play() { }<br />
void ShuffleCards() { }<br />
void RemovePlayerPairs(int player) { }<br />
void PrintResults() { }<br />
}<br />
}<br />
</code><br />
<br />
Ну да, знаю, здесь куча пустых методов, но они проясняют структуру программы. Заметили, что мне пришлось объявить все переменные<br />
внутри классов '''Player''' и '''Card''' как '''public'''? Это потому, что переменные<br />
внутри объекта доступны только внутри самого объекта, чтобы внешние части кода их не затрагивали. Но так как у нас довольно простая<br />
программа, класс Geno будет делать большую часть работы и использовать классы '''Player и '''Card''' просто для хранения значений. То, что<br />
эти переменные стали '''public''', значит, что класс '''Geno''' может их читать<br />
и записывать ['''в серьезных программах так делать не рекомендуется – вместо этого следует определить методы, обеспечивающие доступ извне к закрытым переменным, – прим.ред.'''].<br />
<br />
===Введение в обобщенные типы===<br />
<br />
{{Врезка<br />
|Заголовок=Скорая помощь<br />
|Содержание=Если вы не хотите, чтобы переменная была недоступна вне класса, удалите слово '''public'''. Или, если хотите быть точным, напишите вместо него слово '''private'''.<br />
|Ширина=200px}}<br />
<br />
У нас есть класс '''Card''', то есть мы можем определить значение карты<br />
(от 1 до 13) и ее масть. Но мы еще не создали сам объект «карты» и<br />
не знаем, где их хранить. Здесь приходят на помощь массивы: они<br />
позволяют хранить множество объектов в одной переменной. У ''Mono''<br />
есть огромное количество типов массивов, но долгое время наиболее<br />
используемым был '''ArrayList'''. Он позволяет хранить в массиве любой<br />
тип объекта и обращаться к нему просто по индексу. Но здесь есть<br />
проблема: у каждой переменной в ''C#'' есть тип, будь то '''integer, string, Suit''' или любой другой. Так как '''ArrayList''' может содержать переменную<br />
любого типа, то вам всегда придется сообщать ''Mono'', какой тип используется. Например:<br />
<br />
<code><br />
int i = 1;<br />
ArrayList numbers = new ArrayList();<br />
numbers.Add(i);<br />
int j = numbers[0];<br />
</code><br />
<br />
Здесь будет ошибка – ''Mono'' не сможет преобразовать '''numbers[0]'''<br />
в '''integer''', даже если мы знаем, что оно уже типа '''integer'''. Вместо этого<br />
надо написать:<br />
<br />
<code><br />
int j = (int)numbers[0];<br />
</code><br />
<br />
Префикс '''(int)''' значит «обращаться с '''numbers[0]''' как с целым числом», и наш код будет компилироваться правильно. Новые версии ''C#'', включая поставляемую с Fedora Core 6, поддерживает новый способ<br />
программирования, известный как обобщенные типы '''(generics)'''. И <br />
если вы когда-либо раньше использовали ''С++'', то знакомы с термином<br />
«шаблон», а это почти тоже самое – только на вид гораздо легче!<br />
<br />
Обобщенные типы – это произвольные массивы, которые принимают только один тип переменных. Вам уже не надо приписывать '''(int)''',<br />
чтобы вытаскивать целые числа из обобщенного списка – туда так и так<br />
можно помещать только целые числа. В Geno обобщенные типы будут<br />
использоваться для двух вещей: хранения карт и хранения игроков. У<br />
каждого игрока будет свой собственный список карт, так как карты из<br />
колоды раздаются именно игрокам.<br />
<br />
Добавьте такие две строчки сразу под строкой '''class Geno''':<br />
<br />
<code><br />
List<Card> Cards = new List<Card>();<br />
List<Player> Players = new List<Player>();<br />
</code><br />
<br />
Этот синтаксис может затуманить мозги, но по-простому он гласит<br />
«Хочу, чтобы один список содержал переменные типа '''Card''', а второй<br />
список содержал переменные типа '''Players'''». Вы также должны добавить строку до переменной '''Score''' в классе '''Player''':<br />
<br />
<code><br />
public List<Card> Cards = new List<Card>();<br />
</code><br />
<br />
===Устанавливаем игру===<br />
<br />
Оба наших списка '''Players''' и '''Cards''' пусты, поэтому первым заданием<br />
будет поместить 51 карту в колоду (помните, что мы убрали бубновую<br />
даму) и разместить несколько игроков. Самым простым способом вста-<br />
вить карты будет перебрать в цикле все масти ('''Suits''), и для каждой масти посчитать от одного до 13 так, чтобы получить все от тузов до королей [туз считается единицей]. Добавив все карты и всех игроков, завершаем установку, вызывая метод '''ShuffleCards()''' для перетасовки карт.<br />
<br />
<code><br />
foreach (Suits suit in Enum.GetValues(typeof(Suits))) {<br />
for (int i = 1; i < 14; ++i) {<br />
Card card = new Card();<br />
card.Val = i;<br />
card.Suit = suit;<br />
if (card.Val == 12 && card.Suit == Suits.Diamonds) continue;<br />
Cards.Add(card);<br />
}<br />
}<br />
for (int i = 0; i < 4; ++i) {<br />
Player player = new Player();<br />
Players.Add(player);<br />
}<br />
ShuffleCards();<br />
</code><br />
<br />
Вы видите, что надо вызвать просто '''Cards.Add(card)''', чтобы вставить карту в список из '''Cards'''; все очень просто. Метод '''ShuffleCards()''' пока ничего не делает, потому что он пустой. Нам необходимо пройтись по всему массиву '''Cards''', вытащить отдельные карты и поместить их обратно в произвольную позицию. Тут не обойтись без генератора<br />
случайных чисел – вставьте эту строку перед '''static void Main''':<br />
<br />
<code><br />
Random Rand = new Random();<br />
</code><br />
<br />
Теперь полная реализация '''ShuffleCards()''':<br />
<br />
<code><br />
void ShuffleCards() {<br />
for (int i = 0; i < Cards.Count; ++i) {<br />
Card tmp = Cards[i];<br />
Cards.RemoveAt(i);<br />
Cards.Insert(Rand.Next(0, Cards.Count), tmp);<br />
}<br />
}<br />
</code><br />
<br />
Здесь показано несколько новых возможностей списков: у них есть<br />
свойство '''Count''', которое возвращает число содержащихся в них элементов; они содержат метод '''RemoveAt()''', который удаляет элемент в указанной позиции; и у них есть метод '''Insert()''', который вставляет элемент в указанную позицию. Номер позиции определяется переменной '''Rand''', которая может генерировать число между 0 и '''Crads.Count''' (количество карт в колоде).<br />
<br />
===Раздаем карты===<br />
<br />
Наша колода заполнена и стасована. Осталось сдать ее игрокам. Чтобы<br />
это сделать, будем давать им карты, пока колода не кончится. Это зна<br />
чит, что нам надо начать с игрока 0 (в ''C#'' списки начинаются с 0), сдать<br />
карту, перейти к игроку 1, сдать карту и так далее, пока не закончатся<br />
игроки; потом перейти снова к игроку 0. В коде этот алгоритм будет<br />
выглядеть вот так:<br />
<br />
<code><br />
int playernum = 0;<br />
while (Cards.Count > 0) {<br />
Players[playernum].Cards.Add(Cards[0]);<br />
Cards.RemoveAt(0);<br />
++playernum;<br />
if (playernum == Players.Count) playernum = 0;<br />
}<br />
// удалять начальные пары<br />
for (int i = 0; i < Players.Count; ++i) {<br />
RemovePlayerPairs(i);<br />
}<br />
</code><br />
<br />
В последней части (от комментариев и ниже) уже начинается логи<br />
ка игры: каждый игрок удаляет пары карт, которые оказались у него в<br />
начале игры.<br />
<br />
===Пишем логику===<br />
<br />
Метод '''RemovePlayerPairs()''' принимает на вход номер игрока и удаляет<br />
у него парные карты. Чтобы облегчить понимание, я разделил функцию на две, вот так:<br />
<br />
<code><br />
void RemovePlayerPairs(int player) {<br />
while (TryPairRemove(player)) {<br />
++Players[player].Score;<br />
}<br />
}<br />
</code><br />
<br />
Итак, номер игрока поступает в функцию и передается методу<br />
'''TryPairRemove()'''. Если этот метод вернул '''true''', значит, была найдена<br />
пара; затем он вызывается снова. В конце концов будут найдены все<br />
пары, и цикл завершит свою работу.<br />
<br />
Метод '''TryPairRemove()''' немного сложноват, так как ему надо у каждого игрока взять карту, перебрать остальные его карты на предмет<br />
совпадения, и если в паре ни одна из карт не является дамой червей <br />
удалить пару и вернуть '''true'''.<br />
<br />
<code><br />
bool TryPairRemove(int player) {<br />
Card card1;<br />
Card card2;<br />
Player thisplayer = Players[player];<br />
for (int i = 0; i < thisplayer.Cards.Count; ++i) {<br />
card1 = thisplayer.Cards[i];<br />
if (card1.Suit == Suits.Hearts && card1.Val == 12) continue;<br />
for (int j = i + 1; j < thisplayer.Cards.Count; ++j) {<br />
card2 = thisplayer.Cards[j];<br />
if (card2.Suit == Suits.Hearts && card2.Val == 12) continue;<br />
if (card1.Val == card2.Val) {<br />
thisplayer.Cards.RemoveAt(j);<br />
thisplayer.Cards.RemoveAt(i);<br />
Console.WriteLine(“Player “ + (player + 1) + “ plays “ + CardName(card1) + “ and “ + CardName(card2));<br />
return true;<br />
}<br />
}<br />
}<br />
return false;<br />
}<br />
</code><br />
<br />
Некоторые комментарии по коду:<br />
* 1 '''j''' начинается с '''i+1''': среди проверенных карт совпадений нет.<br />
* 2 Проверка совпадения с дамой червей делается и для '''card1''', и для '''card2'''.<br />
* 3 Если найдено совпадение, сначала удаляется '''j''', затем '''i'''. Удаление элемента из списка заставляет сдвигаться все элементы массива, чтобы закрыть пробел, поэтому первым надо удалять элемент с более высоким индексом.<br />
* 4 Метод '''CardName()''' будет описан далее.<br />
<br />
Да, это солидный кусок кода, ведь мы должны дважды перебрать<br />
карты игрока. Метод '''CardName()''' очень прост и выдает названия<br />
карт, я не буду приводить его здесь – можете обратиться к исходному коду на диске.<br />
<br />
{{Врезка<br />
|Заголовок=Попробуйте другие типы<br />
|Содержание=Списки – это несортированные массивы, обращение к которым<br />
осуществляется по номеру позиции, но можно также использовать<br />
словари, с обращением через определенный вами тип. Например,<br />
'''Dictionary<string,string>''' хранит строки как ключи массива и как его<br />
значения. Если ключ '''foo''' имеет значение '''bar''', вы можете найти его так:<br />
'''MyDictionary[“foo”]'''. Можете использовать любой тип данных – даже<br />
объекты или другие обобщенные типы, если хотите.<br />
|Ширина=200px}}<br />
<br />
===Последний рывок===<br />
<br />
Оставшийся код обрабатывает основной игровой цикл: игроки выбирают карты и пытаются найти пары. Самой сложной частью является<br />
выбор игрока, у которого надо вытащить карту: код должен начать<br />
искать игрока «справа» от нас (то есть его номер должен быть больше<br />
нашего), но если он никого не находит, то начинает смотреть с начала<br />
списка. Если он вернулся обратно, значит, игра закончилась. Если найден подходящий игрок, у него выбирается карта, возможно, сбрасываются новые пары, и игра продолжается.<br />
<br />
Этот код должен следовать до конца метода '''Play()'''. Он длинный, но<br />
не такой сложный, если разбить его на части вот так:<br />
<br />
{{Врезка<br />
|Заголовок=Скорая помощь<br />
|Содержание=Есть соблазн использовать целые числа, а не перечисления для списков. Например, воскресенье может быть 0, понедельник – 1, и так далее. Хотя для небольших списков это работает, в случае больших списков легко запутаться. Перечисления работают ничуть не медленнеe целых, так как автоматически преобразуются в целые числа.<br />
|Ширина=200px}}<br />
<br />
<code><br />
bool finished = false;<br />
while (!finished) {<br />
int playersleft = Players.Count;<br />
for (int i = 0; i < Players.Count; ++i) {<br />
Player player = Players[i];<br />
if (player.Cards.Count == 0) {<br />
--playersleft;<br />
continue;<br />
}<br />
</code><br />
<br />
Здесь отслеживается число игроков, оставшихся в игре. Если это<br />
значение равно 1, то надо выходить; займемся этим позже. Сейчас<br />
цикл просто обрабатывает каждого игрока.<br />
<br />
<code><br />
int playertouse = -1;<br />
for (int j = i + 1; j < Players.Count; ++j) {<br />
if (Players[j].Cards.Count > 0) {<br />
playertouse = j;<br />
break;<br />
}<br />
}<br />
if (playertouse == -1) {<br />
for (int j = 0; j < Players.Count; ++j) {<br />
if (Players[j].Cards.Count > 0) {<br />
playertouse = j;<br />
break;<br />
}<br />
}<br />
}<br />
</code><br />
<br />
Этот блок ищет игрока, у которого нужно вытянуть карту: сперва<br />
над текущей позицией, потом с начала. Игроки, у которых нет карт,<br />
автоматически пропускаются.<br />
<br />
</code><br />
if (playertouse == i) {<br />
finished = true;<br />
break;<br />
} else {<br />
int cardtochoose = Rand.Next(0, Players[playertouse].Cards.<br />
Count);<br />
Players[i].Cards.Add(Players[playertouse].<br />
Cards[cardtochoose]);<br />
Players[playertouse].Cards.RemoveAt(cardtochoose);<br />
RemovePlayerPairs(i);<br />
}<br />
}<br />
</code><br />
<br />
Теперь начинается самое интересное: если мы добрались сами<br />
до себя, значит, нет игроков, у которых можно взять карту. В<br />
противном случае, берем произвольную карту и вызываем метод<br />
'''RemovePlayerPairs()''', для сброса подходящей пары.<br />
<br />
<code><br />
if (playersleft == 1) finished = true;<br />
}<br />
PrintResults();<br />
</code><br />
<br />
Наконец, если игроков не осталось, завершаем цикл. Игра закончена, и '''PrintResult()''' выдает сообщение:<br />
<br />
<code><br />
void PrintResults() {<br />
Console.WriteLine(“”);<br />
for (int i = 0; i < Players.Count; ++i) {<br />
if (Players[i].Cards.Count > 0) {<br />
Console.WriteLine(“У игрока “ + (i + 1) + “ осталась дама червей!”);<br />
break;<br />
}<br />
}<br />
}<br />
</code><br />
<br />
Если вы запустите программу, то увидите четырех компьютерных<br />
игроков, играющих около секунды. Теперь у вас есть понимание о<br />
классах и объектах, и вы можете извлечь преимущества обобщенных<br />
типов для хранения ваших объектов. Вы также узнали, как сделать<br />
несложную карточную игру – полпути к разработке покера или любой<br />
другой игры. '''LXF'''</div>Crazy Rebel