Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2012, 17:23
Nemfoman Nemfoman вне форума
Прохожий
 
Регистрация: 11.04.2012
Сообщения: 5
Репутация: 10
По умолчанию Крестики нолики 19х19 через Stringgrid

Крестики не вводятся не знаю почему. Если можете посоветова проверку на выйграшь какую нить более лучшую ??
Код:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure FormCreate(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 var
   Form1: TForm1;
   xo:bool;   //
implementation
 
{$R *.dfm}
 
 
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
 i,j:integer;
 summvert,summhorz,summdiag1,summdiag2:string;
begin
   with stringgrid1 do
  begin
    defaultDrawing:=True;// если этот параметр выставить в false, то никакие
    //введённые символы отрисовываться не будут
    // в фиксированных ячейках нельзя ничего писать, поэтому уберём их
    FixedCols:=0;
    FixedRows:=0;
 
    Options:=Options-[goEditing];// защита от ввода символов с клавиатуры
  end;
 begin
  if (stringgrid1.Cells[ACol,ARow]<>'') then exit;
 
  if xo then stringgrid1.Cells[ACol,ARow]:='X'
 else stringgrid1.Cells[ACol,ARow]:='O'; // -, -
xo:=not xo; //
for i:=0 to 19 do       //
 for j:=0 to 19 do
 begin
  summvert:=stringgrid1.cells[i,j]+stringgrid1.cells[i+1,j]+stringgrid1.cells[i+2,j]+stringgrid1.cells[i+3,j]+stringgrid1.cells[i+4,j];
  summhorz:=stringgrid1.cells[i,j]+stringgrid1.cells[i,j+1]+stringgrid1.cells[i,j+2]+stringgrid1.cells[i,j+3]+stringgrid1.cells[i,j+4];
  summdiag1:=stringgrid1.cells[i,j]+stringgrid1.cells[i+1,j+1]+stringgrid1.cells[i+2,j+2]+stringgrid1.cells[i+3,j+3]+stringgrid1.cells[i+4,j+4];
  summdiag2:=stringgrid1.cells[i,j+4]+stringgrid1.cells[i+1,j+3]+stringgrid1.cells[i+2,j+2]+stringgrid1.cells[i+3,j+1]+stringgrid1.cells[i+4,j];
  if (summvert='XXXXX') or (summhorz='XXXXX') or (summdiag1='XXXXX') or(summdiag2='XXXXX') then MessageDlg('X-win', mtInformation,[mbOk], 0);
  if (summvert='OOOOO') or (summhorz='OOOOO') or (summdiag1='OOOOO') or(summdiag2='OOOOO') then MessageDlg('O-win', mtInformation,[mbOk], 0);
 end;
end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
xo:=true;    // -, -  
end;
end.
Админ: Используем теги по назначению!

Последний раз редактировалось Admin, 12.04.2012 в 21:43.
Ответить с цитированием
  #2  
Старый 12.04.2012, 21:33
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Данный ранее код не понравился?
Делать такую игру на StringGrid-е - извращение. Используй DrawGrid.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 12.04.2012, 21:46
Аватар для Jlovenpk1|seyu
Jlovenpk1|seyu Jlovenpk1|seyu вне форума
Прохожий
 
Регистрация: 09.04.2012
Адрес: Астрахань
Сообщения: 37
Версия Delphi: Delphi 7 online
Репутация: 10
По умолчанию

Люди не ищут легких путей
__________________
Антивирусы лажа...(с) Я
Как бы хотелось с программировать маленький мирок и почувствовать себя богом.
Ответить с цитированием
  #4  
Старый 12.04.2012, 21:51
Nemfoman Nemfoman вне форума
Прохожий
 
Регистрация: 11.04.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Данный ранее код не понравился?
Делать такую игру на StringGrid-е - извращение. Используй DrawGrid.
а через drawgrid что поменяется ???
Код:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    DrawGrid1: TDrawGrid;
    procedure FormCreate(Sender: TObject);
    procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 var
   Form1: TForm1;
   xo:bool;   //
implementation
 
{$R *.dfm}
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var
 i,j:integer;
 summvert,summhorz,summdiag1,summdiag2:string;
 begin
  if (DrawGrid1.Cell[ACol,ARow]<>'') then exit; //пустое ли поле
 if xo
 then DrawGrid1.Cell[ACol,ARow]:='X'
 else DrawGrid1.Cell[ACol,ARow]:='O'; // -, -
xo:=not xo; //
for i:=0 to 19 do       //
 for j:=0 to 19 do
 begin
  summvert:=DrawGrid1.cell[i,j]+DrawGrid1.cell[i+1,j]+DrawGrid1.cell[i+2,j]+DrawGrid1.cell[i+3,j]+DrawGrid1.cell[i+4,j];
  summhorz:=DrawGrid1.cell[i,j]+DrawGrid1.cell[i,j+1]+DrawGrid1.cell[i,j+2]+DrawGrid1.cell[i,j+3]+DrawGrid1.cell[i,j+4];
  summdiag1:=DrawGrid1.cell[i,j]+DrawGrid1.cell[i+1,j+1]+DrawGrid1.cell[i+2,j+2]+DrawGrid1.cell[i+3,j+3]+DrawGrid1.cell[i+4,j+4];
  summdiag2:=DrawGrid1.cell[i,j+4]+DrawGrid1.cell[i+1,j+3]+DrawGrid1.cell[i+2,j+2]+DrawGrid11.cell[i+3,j+1]+DrawGrid1.cell[i+4,j];
  if (summvert='XXXXX') or (summhorz='XXXXX') or (summdiag1='XXXXX') or(summdiag2='XXXXX') then MessageDlg('X-win', mtInformation,[mbOk], 0);
  if (summvert='OOOOO') or (summhorz='OOOOO') or (summdiag1='OOOOO') or(summdiag2='OOOOO') then MessageDlg('O-win', mtInformation,[mbOk], 0);
 end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
xo:=true;    // -, -  
end;
end.
Админ: Последнее напоминание про оформление...

Последний раз редактировалось Admin, 13.04.2012 в 10:01.
Ответить с цитированием
  #5  
Старый 12.04.2012, 21:55
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

У меня все работает.

Последний раз редактировалось YVitaliy, 12.04.2012 в 21:58.
Ответить с цитированием
  #6  
Старый 12.04.2012, 22:02
Nemfoman Nemfoman вне форума
Прохожий
 
Регистрация: 11.04.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от YVitaliy
У меня все работает.
у меня все cell подчеркнул и пишет ошибку
Ответить с цитированием
  #7  
Старый 12.04.2012, 22:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Nemfoman
а через drawgrid что поменяется ???
Ничего особенного, смотреться будет не так убого., в нём можно крестики и нолики хотя-бы отрисовать, а не символами выводить.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 12.04.2012, 22:08
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Я не о DrawGrid, а о StringGrid. В DrawGrid нужно рисовать "ручками" все-таки. В DrawGrid есть ф-ция CellRect() для этого.
Ответить с цитированием
  #9  
Старый 12.04.2012, 22:10
Nemfoman Nemfoman вне форума
Прохожий
 
Регистрация: 11.04.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от YVitaliy
Я не о DrawGrid, а о StringGrid. В DrawGrid нужно рисовать "ручками" все-таки. В DrawGrid есть ф-ция CellRect() для этого.
да нашел уже, но при запуске строку красным выделяет.
Цитата:
begin
if (DrawGrid1.CellRect[ACol,ARow]<>'') then exit; //пустое ли поле
Ответить с цитированием
  #10  
Старый 12.04.2012, 22:12
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Для проверки выигрыша лучше заполнять массив типа integer: где крестик - "+1", где нолик - "-1". Проверять на заполненность массива не нулями полностью, дальше суммировать все, если сумма положительная - то выиграли крестики, иначе - нолики - иначе - ничья.

Последний раз редактировалось YVitaliy, 12.04.2012 в 22:15.
Ответить с цитированием
  #11  
Старый 12.04.2012, 22:14
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

DrawGrid1.CellRect[ACol,ARow] - возвращает тип TRect, он нужен, чтоб знать область где находится ячейка на холсте и где соответственно рисовать "крестик" или "нолик". Для сохранения статуса нужно создавать отдельный двумерный массив - описано выше.
Ответить с цитированием
  #12  
Старый 12.04.2012, 22:23
Nemfoman Nemfoman вне форума
Прохожий
 
Регистрация: 11.04.2012
Сообщения: 5
Репутация: 10
По умолчанию

Я в школе учусь, и потому что я учусь в а классе, нам надо делать проект по инфе в виде программы. Делаем мы его мягко говоря не по желанию, ибо в конце года итог контрольная, НО максимальная оценка за него 3.
Если пишу проект, то либо 4 или 5.
Я сдаю физику и бля меня програмирование это оч жестоко !

Создавать двумерный массив ?? А эта проверка на выйгрышь теперь не катит как я понял .
Ответить с цитированием
  #13  
Старый 13.04.2012, 00:32
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Типа так (пример только):
Вложения
Тип файла: rar crossm.rar (193.5 Кбайт, 17 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025