![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 27.05.2011
Сообщений: 2
|
![]()
Конь из любой позиции на шахматном поле должен побывать на каждой клетке не более одного раза. Необходимо пройти все клетки. Пользователь задает только начальную позицию. Желательно с "защитой от дурака". На Паскале в Turbo delphi в Forms Applications.
СРОЧНО. Часть программы уже написана, но необходима значительная доработка.. =) unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, math, ComCtrls, Menus; type TForm1 = class(TForm) Image1: TImage; Button1: TButton; Image2: TImage; StatusBar1: TStatusBar; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; procedure Button1Click(Sender: TObject); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N1Click(Sender: TObject); procedure Paint; procedure N2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit3; var x1,y1,a,i,j,n:integer; m:array [1..8,1..8] of integer; Xmouse, Ymouse:integer; Xt,Yt,Xt1,Yt1: integer; f:boolean; st:string; {$R *.DFM} procedure Tform1.Paint; begin Image1.Canvas.brush.color := clwhite; Image1.Canvas.Rectangle(0,0,image1. Width,image1.Height); for i:=0 to 8 do begin image1.Canvas.MoveTo (x1*i,0); image1.Canvas.LineTo( x1*i,y1*8); image1.Canvas.MoveTo (0,y1*i); image1.Canvas.LineTo( x1*8,y1*i); end; end; procedure TForm1.Button1Click(Sender: TObject); begin x1:=40;y1:=40; paint; for i:=1 to 8 do for j:= 1 to 8 do m[i,j]:=0; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Xmouse:=x; Ymouse:=y; end; procedure TForm1.Image1Click(Sender: TObject); begin Xt:= ceil(Xmouse/x1); Yt:= ceil(Ymouse/y1); if f=false then begin f:= true; image2.Visible:=true; image2.Left:=(xt-1)*x1+4; image2.Top:= (Yt-1)*y1+4; Image1.Canvas.brush.color := clSilver; Image1.Canvas.Rectangle((Xt-1)*x1,(Yt-1)*y1,Xt*x1,Yt*y1); n:=n+1; Image1.Canvas.Font.Style:=[fsBold]; Image1.Canvas.TextOut((Xt-1)*x1+10,(Yt-1)*y1+10,IntToStr(n)); m[Xt,Yt]:=1; Xt1:=Xt;Yt1:=Yt; StatusBar1.SimpleText:='Вы сделали первый ход'; end else begin if (((Xt1= Xt+2) and (Yt1=Yt+1)) or ((Xt1= Xt+2) and (Yt1=Yt-1)) or ((Xt1= Xt-2) and (Yt1=Yt+1)) or ((Xt1= Xt-2) and (Yt1=Yt-1)) or ((Xt1= Xt+1) and (Yt1=Yt+2)) or ((Xt1= Xt+1) and (Yt1=Yt-2)) or ((Xt1= Xt-1) and (Yt1=Yt+2)) or ((Xt1= Xt-1) and (Yt1=Yt-2))) then if m[Xt,Yt]=0 then begin image2.Left:=(xt-1)*x1+4; image2.Top:= (Yt-1)*y1+4; n:=n+1; Image1.Canvas.brush.color := clSilver; Image1.Canvas.Rectangle((Xt-1)*x1,(Yt-1)*y1,Xt*x1,Yt*y1); Image1.Canvas.TextOut((Xt-1)*x1+10,(Yt-1)*y1+10,IntToStr(n)); m[Xt,Yt]:=1; Xt1:=Xt;Yt1:=Yt; StatusBar1.SimpleText:='До победы осталось ходов: '+ IntToStr(64-n); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin f:=false; button1.Click; StatusBar1.SimpleText:='Щелкните где-нибудь в поле '; end; procedure TForm1.N1Click(Sender: TObject); begin f:=false; Image2.Visible:=false; paint; for i:=1 to 8 do for j:= 1 to 8 do m[i,j]:=0; n:=0; end; procedure TForm1.N2Click(Sender: TObject); begin showMessage ('Для победы необходимо обойти все клетки шахматной доски ходом коня, побывав в каждой лишь по одному разу'); end; end. Нужен алгоритм, чтобы все действия (ходы) выполнялись автоматически, с задержкой. Последний раз редактировалось Lulilu_sp; 27.05.2011 в 01:07. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 24.03.2011
Сообщений: 120
|
![]()
Это попытка предложить работу? Или нам телепатически исправлять твой код?))
Прога на основе алгоритма поиска цикла Гамельтона. Могу сделать полностью с нуля(за печеньку), доработкой чужого кода не занимаюсь.)) |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 27.05.2011
Сообщений: 2
|
![]()
И какова цена печеньки?
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 24.03.2011
Сообщений: 120
|
![]()
[щас будет долгое вступление, его можно не читать]
Первый минус: В ближайшее время завален заказами с печеньем. Только если на след выходных(т.е.4 и 5 числа). Второй минус: Паскаль я последний раз щупал очень давно, так что придётся его вспоминать и никаких наработок на нём у меня нет.Так что это внаглую взвинчивает цену, увы.( Третий минус: Универ глодает мою ногу и ползёт всё выше. И всё же, в след выходные могу сделать. Стоимость учитывает напряжённость нынешней обстановки и необходимость вспоминать паскаль. Так что за 100 печенюшек готов напрячься и сделать(если на С++, то выйдет дешевле)(но если возьмусь - сделаю всё на совесть). (а, и да, одна печенюшка 20 руб) Если решишься - моя аська 473010803. А вообще, задача стара как мамонты(плюс минус пару сотен лет). Погугли, наверняка кто нить когда нить её уже делал и по доброму выложил в инет. (твой код не смотрел, быть ты почти уже её сделал(а)))) Последний раз редактировалось Ksardas13; 30.05.2011 в 03:22. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 24.01.2011
Сообщений: 18
|
![]()
Введи в гугле ТУР коня не делфи (или паскале), в технаре делал такое но года 2 назад, а тут понадоблися и первая ссыль гугла то что нужно!
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать программу демонстрации графических возможностей Turbo C++ и обучающую работе с основными граф | Donny537 | Помощь студентам | 0 | 09.05.2011 17:11 |
написать программу на Turbo Pascal 7.0 | Sashko_Milashko | Фриланс | 11 | 15.02.2010 13:09 |
написать программу на Turbo Pascal 7.0 | Sashko_Milashko | Помощь студентам | 1 | 14.02.2010 00:47 |