Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.81/32: Рейтинг темы: голосов - 32, средняя оценка - 4.81
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
1

Игра Судоку

03.08.2011, 14:15. Просмотров 5853. Ответов 20
Метки нет (Все метки)

Здравствуйте. Может кто нибудь дать исходник игры Судоку (думаю о правилах игры рассказывать не стоит), пробовал гуглить, но там только алгоритмы решения. Если ни у кого нет, то можете пожалуйста помочь написать, я пробовал создать Судоку на основе компонента StringGrid, но я не разобрался как в нем изменять толщину определенных линий, хотя это не самое важное, главное сам код. Как сделать так что бы при повторении цифры, она, допустим, меняла свой цвет и цвет повторяющейся цифры? Если вы знаете хотя бы 50% ответа на мой вопрос, пожалуйста ответьте, буду очень признателен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2011, 14:15
Ответы с готовыми решениями:

Игра судоку на Delphi 7
Игра судоку на Delphi 7 В прошлом году делал курсовой проект для одного...

Переделать обычное судоку в судоку чёт-нечёт
Здравствуйте. Помогите, пожалуйста, переделать обычное судоку 9х9 в судоку...

Судоку
Хочу написать программу которая генерирует все возможные варианты заполнения...

Судоку
Надо написать программу, решающую судоку. Чтоб я вводила числа с клавы а прога...

Судоку
Здравствуйте. Нужно реализовать приложение "Судоку", использую компонент...

20
NIch
400 / 311 / 74
Регистрация: 17.03.2010
Сообщений: 1,120
03.08.2011, 14:34 2
Ты хочешь только играть в судоку или что бы программа еще и сама решала?
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
03.08.2011, 14:48  [ТС] 3
Нет, пока только нужна сама игра, что бы она еще и сама решала не надо, это пока для меня через чур)))
0
alexan0308
61 / 45 / 4
Регистрация: 07.06.2011
Сообщений: 378
Записей в блоге: 2
04.08.2011, 10:46 4
В обычном стрингриде муторно красить определенную ячейку. Могу скинуть компонент цветной стрингрид где это делается легче с примером. Но это только проц десять дела...))
Самое трудно это даже не проверка правильности решения, а Начальная расстановка цифр... Которая еще иногда может не иметь решения! ))
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
04.08.2011, 10:59  [ТС] 5
Тоже верно, но я эту проблему собирался решить с помощью dll библиотеки куда буду записывать решаемые варианты игры, муторно конечно, но зато просто. К тому же я мегасудоку не стремлюсь написать, так что ни будь простенькое что бы разобраться как все это дело работает (а то планы Наполеоновские, а умение пока оставляет желать лучшего))). А по поводу цветного стингрида - это можно))))
0
DenNik
Непрофессионал
1803 / 1457 / 307
Регистрация: 26.07.2011
Сообщений: 8,043
04.08.2011, 11:03 6
Цитата Сообщение от |VoroN| Посмотреть сообщение
Тоже верно, но я эту проблему собирался решить с помощью dll библиотеки куда буду записывать решаемые варианты игры...
а зачем заморачиваться с ДЛЛ? можно в файл писать (типизированный или нет - как угодно). попутно свой редактор создать, который и будет в файл писать. А исходные раскладки игры из газет брать
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
04.08.2011, 11:16  [ТС] 7
Тоже вариант, но с файлами я еще как то пока особо не сталкивался, библеотеку то я пока худо - бедно но написать и подключить смогу, а вот файлы это для меня пока неизведанная шляпа .
0
DenNik
Непрофессионал
1803 / 1457 / 307
Регистрация: 26.07.2011
Сообщений: 8,043
04.08.2011, 11:28 8
Вот простой пример работы с типизированными файлами

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.Button1Click(Sender: TObject);
var
  f: file of word;
  i: word;
begin
  { ============= запись в файл ===============}
  // назначаем путь файловой переменной
  AssignFile(f,'c:\datafile.dat');
  // открываем файл (перезапись или создание нового)
  Rewrite(f);
  // записываем поток данных
  for i:= 1 to 100 do
    Write(f,i);
  // закрываем файл
  CloseFile(f);
 
  { ============== чтение из файла ==============}
  AssignFile(f,'c:\datafile.dat');
  // открываем файл для чтения
  Reset(f);
  // пока не достигнут конец файла, считываем данные
  // и записываем в МЕМО
  while not Eof(f) do
  begin
    Read(f,i);
    Memo1.Lines.Append(IntToStr(i));
  end;
  CloseFile(f);
end;
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
04.08.2011, 11:37  [ТС] 9
Спасибо, разберемся на досуге, и все таки, сейчас наиболее всего меня интересует вопрос - каким же образом отлавливать повторяющиеся значения в массиве (если я правильно рассуждаю, то судоку нужно делать именно с помощью него)?
0
Puporev
Модератор
54978 / 42287 / 29200
Регистрация: 18.05.2008
Сообщений: 99,910
04.08.2011, 11:49 10
Цитата Сообщение от |VoroN| Посмотреть сообщение
каким же образом отлавливать повторяющиеся значения в массиве
В Судоку числа вроде маленькие, вмещаются в тип byte.
Тогда можно завести множество
Delphi
1
var m:set of byte;
и проверку
Delphi
1
2
3
4
5
6
7
8
9
if not(x in m) then
 begin
  присваиваем
  m:=m+[x];
 end
else
 begin
  красим или еще что там
 end;
0
DenNik
Непрофессионал
1803 / 1457 / 307
Регистрация: 26.07.2011
Сообщений: 8,043
04.08.2011, 11:53 11
да, массивы. я когда-то использовал двумерный массив 9х9. а для отлова повторов я делал так: допустим, при Y = 2 сканируешь все элементы массива с X от 1 до 9 (массив[X,Y]) и ищешь совпадения. это вторая строка. аналогично остальные. того проекта у меня уже нет (
1
alexan0308
61 / 45 / 4
Регистрация: 07.06.2011
Сообщений: 378
Записей в блоге: 2
04.08.2011, 12:17 12
Вот компонент с примерами Компонент zcolorstringgrid.rar

Вот мой пример с готовой таблицей 9 на 9 ЦветнаяТаблица.rar
1
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
04.08.2011, 22:11  [ТС] 13
Ага, вот это интересный код, только что то я не совсем понял как компонент StringGrid (если вы как и я предполагаете использовать его для игрового поля Судоку) может взаимодействовать с типом byte. Можете пожалуйста разжевать поподробнее?

Добавлено через 40 минут
Пардон, интернет тупит)))), не сразу появились 2 последних сообщения, мой предыдущий пост был адресован Puporev
DenNik Я тоже хочу использовать подобный метод, правда меня терзают смутные сомнения - а будет ли вообще такой массив нормально взаимодействовать с компонентом StringGrid или цветным стрин гридом который мне скинул alexan0308 (кстати спасибо за это), они же типа string, в коде который мне предложил Puporev используется тип byte. Я погуглил как осуществляется перевод из типа байт в стринг, но от этого в голове появилось еще больше знаков ???? нежели !!!!... Может использовать массив типа integer вроде этого?:
Delphi
1
type tm = Array[1..9,1..9] of integer;
0
Puporev
Модератор
54978 / 42287 / 29200
Регистрация: 18.05.2008
Сообщений: 99,910
05.08.2011, 08:58 14
Цитата Сообщение от |VoroN| Посмотреть сообщение
как компонент StringGrid (если вы как и я предполагаете использовать его для игрового поля Судоку) может взаимодействовать с типом byte.
Работаете все время с массивом,StringGrig только для отображения.
Delphi
1
2
3
4
var a:array of array of byte;
...........................
a[0,0]:=random(81)+1;
StringGrid1.Cells[0,0]:=IntToStr(a[0,0]);
Если нужно взять числовое значение из грида, то обратное действие.
Delphi
1
a[0,0]:=StrToInt(StringGrid1.Cells[0,0]);
Что-то боюсь что при таких знаниях у Вас мало что получится.
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
05.08.2011, 10:37  [ТС] 15
Puporev Ну потому то я на форум и обратился, дабы помогли и объяснили.
0
Puporev
Модератор
54978 / 42287 / 29200
Регистрация: 18.05.2008
Сообщений: 99,910
05.08.2011, 10:47 16
Цитата Сообщение от |VoroN| Посмотреть сообщение
дабы помогли и объяснили.
Это типа все учебники по Делфи Вам кто-то рассказывать будет? Вы же основ, самого элементарного не знаете.
0
alexan0308
61 / 45 / 4
Регистрация: 07.06.2011
Сообщений: 378
Записей в блоге: 2
05.08.2011, 11:03 17
Цитата Сообщение от Puporev Посмотреть сообщение
Что-то боюсь что при таких знаниях у Вас мало что получится.
Ты |VoroN| как Остап Бендер, который играл на соревнованиях по шахматам на 12 досках, имея опыт одной игры. Чувствуется же, что у тебя маленький опыт. А на кой тебе СУДОКУ?
Учиться конечно надо, но сначала книги по дельфи почитай. У меня самая первая программа игрушка была, но я сначала книгу прочел и сам все смог сделать.

Тебе обязательно придется процедуры писать. С ними хоть знаком? Иначе код будет громоздким.
Пусть стрингрид уже забит и игрок хочет закончить игру
Во первых массовый перевод ячеек стрингрида в массив с помощью операции которую тебе написал Puporev ( кстати только непонятно, зачем он тебе подсунул динамический массив? Судоку ведь не вырастет!)
В стрингриде нумерация с нуля, поэтому сразу считай что первое везде имеет нулевой номер.
Поэтому лучше
Delphi
1
2
type tm = Array[0..8,0..8]  of byte;
var Sudoku:tm;
У тебя только один стрингрид и один массив, поэтому на параматры процедур наплюем:
Delphi
1
2
3
4
5
6
Procedure StringGridToSudoku;
var i,j : byte;
begin
for i:=0 to 8 do
   for j:=0 to 8 do Sudoku[i,j]:=StrToInt(StringGrid1.Cells[j,i]);
end;
Пока это без проверок что пользователь вдруг не все ячейки заполнил или где то букву поставил....Потом допилишь... (о том чтобы проверять после каждой новой набранной цифры давай пока даже не думать )))

теперь надо проверить, что в i строке все числа попарно разные...
Лень писать дальше... ))
0
Puporev
Модератор
54978 / 42287 / 29200
Регистрация: 18.05.2008
Сообщений: 99,910
05.08.2011, 11:11 18
Цитата Сообщение от alexan0308 Посмотреть сообщение
( кстати только непонятно, зачем он тебе подсунул динамический массив? Судоку ведь не вырастет!)
Хоть бы один умник прошел мимо и не подколол... У того мудака, что на три буквы называется, типа mms, учитесь, что ли?
Я просто ответил на вопрос
Сообщение от |VoroN|
как компонент StringGrid (если вы как и я предполагаете использовать его для игрового поля Судоку) может взаимодействовать с типом byte.
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
05.08.2011, 11:14  [ТС] 19
Puporev Да я мало что знаю про тип байт, но это ж не значит что я вообще ни фига не знаю (в конце концов не все с клавиатурой в руках родились). Вы видимо учились программированию в институте, я учусь этому тупо скачивая учебные материалы из интернета - а там знаете ли стараются дать все по минимуму и что бы использовали тип байт мне вообще не приходилось видеть. Конечно с этой судоку я наверное и пытаюсь выше головы прыгнуть, но тем не менее для меня попытка не пытка.
0
Puporev
Модератор
54978 / 42287 / 29200
Регистрация: 18.05.2008
Сообщений: 99,910
05.08.2011, 11:16 20
При чем здесь тип byte? ну напишите integer. Речь ведь о том что Вы не знаете процедуры перевода строки в число и числа в строку.
0
05.08.2011, 11:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2011, 11:16

Судоку снежинка
Ребята, может кто писал или знает как писать программу этой головоломки,...

Написать головоломку, похожую на судоку
Обычная проблема новичка и не знаю куда деваться. Суть проблемы в следующем :...

заполнить stringgrid по принципу судоку
заполнить stringgrid по принципу судоку. может у кого есть идеи, как это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru