КРЕСТИКИ-НОЛИКИ НА C# WINDOWS FORMS APPLICATION/ TIC-TAC-TOE C# WINFORMS

  Рет қаралды 42,509

Debrone Constant

Debrone Constant

Күн бұрын

Пікірлер: 93
@Alisher-nj4pp
@Alisher-nj4pp 4 жыл бұрын
Братан, спасибо большое, благодаря тебе сдал курсовую работу)
@mexxity9508
@mexxity9508 3 жыл бұрын
понимаю, сейчас сам буду курсач готовить)
@sof_blade
@sof_blade 3 жыл бұрын
а работу сохранил?))
@sanchos7364
@sanchos7364 2 жыл бұрын
Также делаю курсач)))
@GontaPone
@GontaPone 5 жыл бұрын
Ля, какой код. Спасибо большое, что помог. Всего наилучшего.
@DebroneConstant
@DebroneConstant 5 жыл бұрын
Ляяя, не за что)))
@АндрійДубик-г9ф
@АндрійДубик-г9ф 2 жыл бұрын
Текущего игрока можно определять по остатку от деления на 2, тогда универсальнее и меньше повторяющегося кода. В целом - спасибо, много нового узнал. Раньше на Delphi программировал, он гораздо удобнее, универсальнее, проще, больше компонентов и возможностей. Но, говорят, сейчас С нужен почему-то.
@АртёмВолков-х1м
@АртёмВолков-х1м 3 жыл бұрын
Хороший видеоурок, как раз пригодился, и все понятно по логике реализации. Да, возможно, можно было и более лаконично написать, но этот код очень наглядный)
@АндрійДубик-г9ф
@АндрійДубик-г9ф 2 жыл бұрын
Спасибо! Многому научился - созданию контролов онлайн! Пожелание - вместо всех этих IF можно было бы написать один длинный, типа (((buttons[0,0].Text==buttons[0,1].Text && buttons[0,1].Text == buttons[0, 2].Text)) || ((buttons[1,0].Text == buttons[1, 1].Text && buttons[1, 1].Text == buttons[1, 2].Text)))... Главное в скобках не запутаться :-) Но меньше бы этих лишних MessageBox.Show("Вы победили!"); было бы
@alexshefer1187
@alexshefer1187 5 жыл бұрын
интересное решение, взял базу, добавил невозможность нажать на кнопки после выигрыша. кроме заново.. Спасибо
@DebroneConstant
@DebroneConstant 5 жыл бұрын
Спасибо, отлично если есть идеи доработки:)
@piotrusyi
@piotrusyi 3 жыл бұрын
17:11 можно упростить код и сразу прописать if(b1.Text == b2.Text && b2.Text == b3.Text && b2.Text != " ")
@Saneeks
@Saneeks 5 жыл бұрын
Привет. Спасибо за видео! Весьма полезно для новичков, смотреть как работает другой человек. Потому что, если нет с кем обсуждать программирование, то это стопорит процесс. Я сделал программу до этого видео. Там был немного более обширный функционал: 1. Игра с ботом (случайно ставит символ) 2. Случайный выбор роли для игрока и смена её после каждой партии. 3. И ещё что-то. Но когда функционал растёт, а знаний не хватает, то код становится громоздким и на каждом новом этапе повышается риск того, что будет необходимо делать костыли. Объясни, пожалуйста, что за функции такие необычные, которые ты пишешь через несколько точек. Например, sender.GetType().GetProperty("Text").SetValue(sender, "x"); Для меня эта запись выглядит очень незнакомо. Я бы написал button1.Text = "x"; и мои функции были бы вложенными: MessageBox.Show((Convert.ToString("4"));. Как называется такой тип записи, который идёт через точку, и чем он отличается? Что такое sender? sender существует только в win forms или, например, в консольном приложение тоже?
@DebroneConstant
@DebroneConstant 5 жыл бұрын
Привет) Спасибо за большой коммент) Что касается записи с "необычными" функциями, так там я построил "забор")) Там надо писать так: Button pressedButton = sender as Button; pressedButton.text = ... Как то так) Ну а sender - это объект, на котором срабатывает обработчик событий, в нашем случае кнопка) То есть через него мы можем получить доступ к компоненту, на котором висит обработчик)
@DebroneConstant
@DebroneConstant 5 жыл бұрын
Кстати, идея с ботом очень хорошая) У меня в планах написать очень примитивных "ботов" для некоторых игр, которые я делал для канала)
@ТяжкоЮра
@ТяжкоЮра 2 жыл бұрын
у тебя ещё осталась игра ?
@Saneeks
@Saneeks 2 жыл бұрын
@@ТяжкоЮра привет. Скорее всего нет. Может я её сохранял где-то, но не помню где.
@xxcharliexx7808
@xxcharliexx7808 Жыл бұрын
А как сделать так чтобы нолик ставила сама программа, рандомно
@kenttleoverwatch7887
@kenttleoverwatch7887 4 жыл бұрын
У меня все равно не работает строка где написано this.Controls-Созданный программный элемент на нашу форму , выдаёт x= 0 ,y = 0 , как это исправить?
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Ну скопируй прям строчку кода)
@kenttleoverwatch7887
@kenttleoverwatch7887 4 жыл бұрын
Да,но все равно выдает по нулям, ладно спасибо за ответ
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Я тебя прошу свой код скинуть))
@kenttleoverwatch7887
@kenttleoverwatch7887 4 жыл бұрын
Debrone Constant куда можно отправить его?)
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Попробуй через pastebin Потом просто ссылку мне скинь
@masarter
@masarter 4 жыл бұрын
Видео хорошее, но я б для повтора игры запихнул бы весь код в while и проверял значение chekwin == true, предварительно добавив в его месседжбокс кнопку повтора. Если я ошибся, поправьте меня, пж)
@l10n94
@l10n94 Жыл бұрын
!Срочно! У меня что то другое выходит когда скачиваю с гитхаба можете помочь пожалуйста! У меня там змейка выходит можете текстом мне в комментах скинуть пожалуйста Крестики нолики код текстом скиньте пж
@semorka
@semorka 2 жыл бұрын
Хорошее видео, но побольше бы объяснений и звук громче а то очень тихо
@imfhenomenal2882
@imfhenomenal2882 Жыл бұрын
Как сделать так чтобы вместо крестиков и ноликов были свои загруженные иконки ?
@uluanaevseeva4467
@uluanaevseeva4467 Жыл бұрын
ты кнопки удалил на форме, для чего это нужно?
@danterage636
@danterage636 2 жыл бұрын
Очень круто
@МаксимПапко-н1ж
@МаксимПапко-н1ж 2 жыл бұрын
Здрастуйте! Код точно такой же как и у вас, но только кнопка рестарта не работает. Даже скопировал ваш код с гитхаба и кнопка всё равно не работает
@ДенисДёмин-ы8ц
@ДенисДёмин-ы8ц 4 жыл бұрын
У меня возник вопрос или даже просьба, ты мог бы снять видео где делаешь алгоритм на эту игру или доделываешь эту программу?
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Какой алгоритм?
@ДенисДёмин-ы8ц
@ДенисДёмин-ы8ц 4 жыл бұрын
Что то на подобии искусственного интеллекта
@viktornik2671
@viktornik2671 4 жыл бұрын
Привет , большое вам спасибо за ваше видео , не подскажите ,почему у меня не работает команда button.ForeColor = Color.Green; при етом команда для фона нормально работает . Я просто только недавно стал знакомиться с Windows Form .
@DebroneConstant
@DebroneConstant 4 жыл бұрын
ForeColor для чего хотите использовать?)
@viktornik2671
@viktornik2671 4 жыл бұрын
@@DebroneConstant Хотел сделать цветной шрифт для "х" и "о"
@blackcoffee8313
@blackcoffee8313 4 жыл бұрын
Привет, с тобой можно как-то связаться?
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Привет Пиши в телегу
@levikrk2692
@levikrk2692 3 жыл бұрын
А как кнопку создать??? просто не давно начал изучать VS
@DebroneConstant
@DebroneConstant 3 жыл бұрын
Там есть дизайнер, можно в нем просто перетащить кнопку на форму Или же в коде создать кнопку, задать свойства и добавить нв форму
@levikrk2692
@levikrk2692 3 жыл бұрын
@@DebroneConstant спасибо!!!!
@Dontdolbaeb
@Dontdolbaeb 2 жыл бұрын
CheckWin можно было сократить в три раза
@Щебетун-в5п
@Щебетун-в5п 5 жыл бұрын
Ты долго учился так быстро пичатать ? Как мне научится также быстро ?
@DebroneConstant
@DebroneConstant 5 жыл бұрын
Чем больше практики , тем быстрее будешь печатать:)
@kavelquu
@kavelquu 4 жыл бұрын
чем больше практикуешься, тем больше практикуешься. Не забывайте об этом☝🏼
@shadowkross3697
@shadowkross3697 3 жыл бұрын
Твой код слишком базовый, ты знаешь про циклы и методы, но не используешь их. 1 - когда ты делал переключение игрока и запись этого игрока в лэйбл ты мог это сделать отдельным методом для улучшения читаемости кода, а проверку на победу ещё проще: создаёшь массив и через {} закидываешь в него все позиции, затем создаёшь 3 метода вертикальная, горизонтальная и x проверка и там с помощью 2 циклов первый для смещения, второй для проверки перебираешь код. Это всё улучшает качество, скорость и читаемость кода + само нажатие на кнопку тоже можно сделать методом: нажатие получено, вызов метода на нажатие, а в нём изменение текста и блокировка кнопки, а затем и смена игрока вызовом другово метода, или перемещением кода из того метода в этот
@DebroneConstant
@DebroneConstant 3 жыл бұрын
Видео 2 года, твой коммент - легаси
@shadowkross3697
@shadowkross3697 3 жыл бұрын
@@DebroneConstant извини, если я не прав и твой скилл сейчас выше, я не видел твоих новых видео, поэтому писал - то, что увидел здесь
@lexanghik2003
@lexanghik2003 4 жыл бұрын
Привет, а вот как мне запретил обновлять label? У меня типо игра в реальном времени, и я через таймер, каждую секунду вызываю this.Reflesh () у меня обновляется OnPaint, и все контрол элементы формы, и лаги из-за того что не только OnPaint онбнов, а ещё и все объекты Forms, что делать?
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Привет, при использовании onpaint рекомендуется использовать invalidate() и двойную буферизацию
@lexanghik2003
@lexanghik2003 4 жыл бұрын
@@DebroneConstant а в чем разница Invalidate?
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Про refresh вообще не слышал Invalidate делает перерисовку когда нужно
@lexanghik2003
@lexanghik2003 4 жыл бұрын
@@DebroneConstant всм когда нужно? У меня все равно каждую секунду вызывает
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Действие invalidate не нагружает и не вызывает лаги Почитай про это
@adinaboobekova2284
@adinaboobekova2284 3 жыл бұрын
Здравствуйте? Вы там кнопки удалили да? Или что зделали?
@DebroneConstant
@DebroneConstant 3 жыл бұрын
В смысле?
@adinaboobekova2284
@adinaboobekova2284 3 жыл бұрын
@@DebroneConstant 23:21 минуте вы убрали кнопку с каким способом? Я в том месте запуталась
@adinaboobekova2284
@adinaboobekova2284 3 жыл бұрын
Ответьте пожалуйста 🙏🙏🙏
@DebroneConstant
@DebroneConstant 3 жыл бұрын
Удалил просто , кнопкой Del
@АнтонРечкин-у3я
@АнтонРечкин-у3я 3 жыл бұрын
А почему не работает кнопка сброса?
@DebroneConstant
@DebroneConstant 3 жыл бұрын
Событие привязано к кнопке?
@railkhamidullin7959
@railkhamidullin7959 5 жыл бұрын
Можешь кинуть пжлст проект этот файлом, очень нужно
@DebroneConstant
@DebroneConstant 5 жыл бұрын
Привет, ссылка на проект в описании))
@testtest-ry3pc
@testtest-ry3pc 5 жыл бұрын
@@DebroneConstant как качать оттуда ? Зарегился , но не нашел скачать ...
@DebroneConstant
@DebroneConstant 5 жыл бұрын
Там ечть справа кнопка зеленая: clone or download
@ToKAIF
@ToKAIF 4 жыл бұрын
@@DebroneConstant я посмотрел, на всех такая кнопка есть, но на крестики Нолики нет
@erdniasarankaev8988
@erdniasarankaev8988 4 жыл бұрын
как то не практично слишком много *if* .
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Согласен Писал давно, явно есть уникальный способ
@erdniasarankaev8988
@erdniasarankaev8988 4 жыл бұрын
@@DebroneConstant но все ровно видно что ты если бы захотел смог бы его создать )
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Ну возможно было лень писать уникальное Я думаю, каждый может осилить
@ferinatorm171
@ferinatorm171 10 ай бұрын
Я прикрутил бота к СВОЕМУ (обожаю сам разбираться в этом пиз₽це) коду и он идиот, но без друзей пойдëт
@dakalas2991
@dakalas2991 5 жыл бұрын
Сколько тебе лет?
@DebroneConstant
@DebroneConstant 5 жыл бұрын
21 :D
@LaFleur_96
@LaFleur_96 4 жыл бұрын
Ифов многовато
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Согласен)) Изобретать уникальный метод не стал, но это всегда можно сделать:)
@LaFleur_96
@LaFleur_96 4 жыл бұрын
@@DebroneConstant Ну я придумал, как это сделать более компактнее. Тоже конечно не идеально, но все же: В первом ифе сделать 8 строк, разделяющихся ||. В каждой строке тоже по три кнопки с текстом "X" через &&. И только потом вывод сообщения. Со вторым ифом тоже самое, только у кнопок текст "Y". Не придется хоть много ифов и вывода сообщения писать. P.S. надеюсь понятно объяснил)
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Думаю, можно еще универсальнее, но этот метод тоже вариант;)
@piotrusyi
@piotrusyi 3 жыл бұрын
@@LaFleur_96 Можно собрать в одно место вот так if((b1.Text == b2.Text && b2.Text == b3.Text && b2.Text != "") | | (b4.Text == b5.Text && b5.Text == b6.Text && b5.Text != "") | | и так далее... { и записать switch(player) { case 1: MessageBox.Show("Player 1 win!) break; case 0: MessageBox.Show("Player 2 win!) break; b1.Text == ""; b2.Text == "";... } }
@a_nisa_21
@a_nisa_21 3 жыл бұрын
Можешь помочь, пожалуйста?
@DebroneConstant
@DebroneConstant 3 жыл бұрын
Чем?
@lexanghik2003
@lexanghik2003 4 жыл бұрын
Привет! Если бы ты мог мне помочь по дс, я хочу сделать стратегию в Forme
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Дс это?
@lexanghik2003
@lexanghik2003 4 жыл бұрын
@@DebroneConstant Дискорд, просто есть 2 не решимых вопроса
@DebroneConstant
@DebroneConstant 4 жыл бұрын
Пиши в телегу: debrone_constant На дис времени мало(
@bug3900
@bug3900 Жыл бұрын
Чек вин можно сделать так private void checkwin() { bool draw = true; // Проверка строк for (int i = 0; i < 3; i++) { if (buttons[i, 0].Text == buttons[i, 1].Text && buttons[i, 1].Text == buttons[i, 2].Text && buttons[i, 0].Text != "") { MessageBox.Show("Победа!"); return; } } // Проверка столбцов for (int j = 0; j < 3; j++) { if (buttons[0, j].Text == buttons[1, j].Text && buttons[1, j].Text == buttons[2, j].Text && buttons[0, j].Text != "") { MessageBox.Show("Победа!"); return; } } // Проверка диагоналей if ((buttons[0, 0].Text == buttons[1, 1].Text && buttons[1, 1].Text == buttons[2, 2].Text && buttons[0, 0].Text != "") || (buttons[2, 0].Text == buttons[1, 1].Text && buttons[1, 1].Text == buttons[0, 2].Text && buttons[2, 0].Text != "")) { MessageBox.Show("Победа!"); return; } // Проверка на ничью (не осталось пустых кнопок) for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (buttons[i, j].Text == "") { draw = false; break; } } } if (draw) { MessageBox.Show("Ничья!"); return; } } не идеально, но как по мне красиво:)
@avtodetalexpert
@avtodetalexpert Жыл бұрын
Вот мой код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace ДЗ_19_20 { public enum Winner//как определяем результат { Crosses,//победили крестики Zeroes,//победили нолики Draw,//ничья GameIsUnfinished//игра закончилась } public enum State { Cross,//крестик Zero,//нолик Unset } public class TicTacToeGame//название игры на английском { private readonly State[] board = new State[9];//задаем массив чисел до 9 ,то есть "игровую доску" public int MovesCounter { get; private set; } public TicTacToeGame() { for (int i = 0; i < board.Length; i++) { board[i] = State.Unset; } } public void MakeMove(int index) { board[index - 1] = MovesCounter % 2 == 0 ? State.Cross : State.Zero; MovesCounter++; } public State GetState(int index)//метод возвращает состояние клетки по индексу { return board[index - 1]; } public Winner GetWinner()//определяем победителя и описываем победные триплеты { return GetWinner( 1, 4, 7, 2, 5, 8, 3, 6, 9, //вертикали 1, 2, 3, 4, 5, 6, 7, 8, 9, //горизонтали 1, 5, 9, 3, 5, 7 //диагонали ); } private Winner GetWinner(params int[] indexes) { for (int i = 0; i < indexes.Length; i += 3) { bool same = AreSame(indexes[i], indexes[i + 1], indexes[i + 2]); if (same) { State state = GetState(indexes[i]); if (state != State.Unset) { return state == State.Cross ? Winner.Crosses : Winner.Zeroes; } } } if (MovesCounter < 9) { return Winner.GameIsUnfinished; } return Winner.Draw; } private bool AreSame(int a, int b, int c) { return GetState(a) == GetState(b) && GetState(a) == GetState(c); } } class Program { private static TicTacToeGame g = new TicTacToeGame(); static void Main(string[] args) { Console.WriteLine(GetPrintableState()); while (g.GetWinner() == Winner.GameIsUnfinished) { int index = int.Parse(Console.ReadLine()); g.MakeMove(index); Console.WriteLine(); Console.WriteLine(GetPrintableState()); } Console.WriteLine($"Result: {g.GetWinner()}"); Console.ReadLine(); } static string GetPrintableState() { var sb = new StringBuilder(); for (int i = 1; i < 9; i += 3) { sb.AppendLine(" | | |") .AppendLine($" {GetPrintableChar(i)} | {GetPrintableChar(i + 1)} | {GetPrintableChar(i+2)} |") .AppendLine("_____|_____|_____|"); } return sb.ToString(); } static string GetPrintableChar(int index) { State state = g.GetState(index); if(state == State.Unset) { return index.ToString(); } return state == State.Cross ? "X" : "O"; } } }
@xelpion
@xelpion 7 ай бұрын
А какой у вас результат выходит?
@user_TAJcGbJA
@user_TAJcGbJA 2 жыл бұрын
Здесь был вопрос "Как избавится от бесконечных if...." Например так: readonly int[,] arr = new int[8, 3] { {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6} }; //Это выигрышные комбинации for (int i = 0; i < 8; i++) { //Это проверка для 9 кнопок на комбинации int k0 = arr[i, 0]; int k1 = arr[i, 1]; int k2 = arr[i, 2]; if (btn[k0].Text != "" && btn[k0].Text == btn[k1].Text && btn[k0].Text== btn[k2].Text) { MessageBox.Show("Победа команды " + btn[k0].Text); } }
@sadjolly
@sadjolly 2 жыл бұрын
не работает
@user_TAJcGbJA
@user_TAJcGbJA 2 жыл бұрын
@@sadjollyЯ просто подал идею из "своих" крестиков роликов. Адаптируйте под свои названия Контролов.
ИГРА ТЕТРИС НА C# WINFORMS GRAPHICS
39:46
Debrone Constant
Рет қаралды 41 М.
Игра "Крестики нолики" C# WINFORMS
28:33
Любитель C#
Рет қаралды 2 М.
Правильный подход к детям
00:18
Beatrise
Рет қаралды 11 МЛН
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
Don’t Choose The Wrong Box 😱
00:41
Topper Guild
Рет қаралды 62 МЛН
Создаем IQ тест на C#
21:12
Itacademylink
Рет қаралды 14 М.
Перемещение объектов мышью C# WinForms
18:33
Debrone Constant
Рет қаралды 14 М.
Linux для Программистов: Зачем и Кому Он Нужен? 🤔
25:18
Александр Савченко
Рет қаралды 5 М.
Made TIC-TAC-TOE on Unity in 7 minutes | How to create a game | tutorial | Creating games on Unity
7:30
Goste Face. Разработчик игр
Рет қаралды 10 М.
Игра "Найди пару" C# WINFORMS
1:02:33
Любитель C#
Рет қаралды 977
How To Create A Snake Game In WPF
15:32
TK Programming
Рет қаралды 1,4 М.
СУДОКУ C# WINAPI/SUDOKU C# WINFORMS
19:20
Debrone Constant
Рет қаралды 13 М.
Правильный подход к детям
00:18
Beatrise
Рет қаралды 11 МЛН