|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.12.2006, 09:25 | #1 |
Регистрация: 11.12.2006
Сообщений: 5
|
карточная игра 21
решил начать с простой карточной игрульки,есть много косяков
1)карты повторяюца 2)при нажатии кнопку себе-одна и тажа карта 3)грамоздкий код помогите или посоветуйте как исправить unit game; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; Image10: TImage; Image11: TImage; Image12: TImage; Image13: TImage; Image14: TImage; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Label1: TLabel; Button1: TButton; Button2: TButton; Label2: TLabel; procedure BitBtn1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var s1,s,x:integer; {$R *.dfm} procedure TForm1.BitBtn1Click(Sender: TObject); begin bitbtn1.Caption:='Дать ещё карту'; if s=21 then begin label1.Caption:='Ты победил'; Button1.Enabled:=false; Bitbtn1.Enabled:=false; end; if s>21 then begin label1.Caption:='Извени, ты проиграл!!!'; Button1.Enabled:=false; Bitbtn1.Enabled:=false; end; if image1.Tag=0 then begin image1.Picture:=image8.Picture; image1.Tag:=1; end else if image2.Tag=0 then begin image2.Picture:=image8.Picture; image2.Tag:=1; end else if image3.Tag=0 then begin image3.Picture:=image8.Picture; image3.Tag:=1; end else if image4.Tag=0 then begin image4.Picture:=image8.Picture; image4.Tag:=1; end else if image5.Tag=0 then begin image5.Picture:=image8.Picture; image5.Tag:=1; end else if image6.Tag=0 then begin image6.Picture:=image8.Picture; image6.Tag:=1; end else if image7.Tag=0 then begin image7.Picture:=image8.Picture; image7.Tag:=1; end; randomize; x:=random(52)+1; label1.Caption:=inttostr(s); case x of 1:begin s:=s+2;image8.Picture.LoadFromFile( '02s.bmp');end; 2:begin s:=s+3;image8.Picture.LoadFromFile( '03s.bmp');end; 3:begin s:=s+4;image8.Picture.LoadFromFile( '04s.bmp');end; 4:begin s:=s+5;image8.Picture.LoadFromFile( '05s.bmp');end; 5:begin s:=s+6;image8.Picture.LoadFromFile( '06s.bmp');end; 6:begin s:=s+7;image8.Picture.LoadFromFile( '07s.bmp');end; 7:begin s:=s+8;image8.Picture.LoadFromFile( '08s.bmp');end; 8:begin s:=s+9;image8.Picture.LoadFromFile( '09s.bmp');end; 9:begin s:=s+10;image8.Picture.LoadFromFile ('10s.bmp');end; 10:begin s:=s+2;image8.Picture.LoadFromFile( '11s.bmp');end; 11:begin s:=s+3;image8.Picture.LoadFromFile( '12s.bmp');end; 12:begin s:=s+4;image8.Picture.LoadFromFile( '13s.bmp');end; 13:begin s:=s+11;image8.Picture.LoadFromFile ('01s.bmp');end; ,,,,,,, 50:begin s:=s+2;image8.Picture.LoadFromFile( '12d.bmp');end; 51:begin s:=s+2;image8.Picture.LoadFromFile( '13d.bmp');end; 52:begin s:=s+2;image8.Picture.LoadFromFile( '01d.bmp');end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin if image9.Tag=0 then begin image9.Picture:=image8.Picture; image9.Tag:=1; end else if image10.Tag=0 then begin image10.Picture:=image8.Picture; image10.Tag:=1; end else if image11.Tag=0 then begin image11.Picture:=image8.Picture; image11.Tag:=1; end else if image12.Tag=0 then begin image12.Picture:=image8.Picture; image12.Tag:=1; end else if image13.Tag=0 then begin image13.Picture:=image8.Picture; image13.Tag:=1; end else if image14.Tag=0 then begin image14.Picture:=image8.Picture; image14.Tag:=1; end; end; end. |
19.12.2006, 12:52 | #2 |
Программист и
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,265
|
Мне кажется, что надо сделать массив с номерами карт. Потом методом случайных чисел выбирать одну карту из массива (удалять элемент массива, смещая всё после “влево”), потом уменьшаем счётчик карт в колоде для Random, чтоб он не брал не существующие карты. С помощью этого можно избежать повтора карт.
Работа c массивом в крации var <указываем имя массива>:array[<нижняя граница>..<верхняя граница>] of <тип данных> мия массива любое нижняя граница - номер первого элемента массива верхняя граница - номер последнего элемента тип данных - integer, string вобщем чё будет записываться в массив Пример: implementation var mass:array[1..52] of string; n:integer; //... при создании формы //... begin n:=0; end; //... при нажатии на кнопку //... begin //задание массива n:=n+1; //обращение к элементу массива происходит по его номеру mass[n]:=edit1.text;// элементу под номером n будет присвоено содержание компонента edit1 end; Всё Последний раз редактировалось Simply-Art; 19.12.2006 в 13:11. Причина: Не дописал работу с массивом |
19.12.2006, 13:02 | #3 | |
Регистрация: 11.12.2006
Сообщений: 5
|
Цитата:
|
|
19.12.2006, 16:38 | #4 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Я когда-то начинал игру делать, взял карты (36 штук), запихал их в 1 bmp, а потом прога сама их считывала от туда в массив. (т.е. получается массив картинок).
Тут (не обращай внимание на название проекта, это я хотел эту игру писать) значит это всё есть, по нажатию кнопки там из массива 1 карта берётся и отображается в Image. Ну я думаю там всё понятно будет: -=DeS=- --------------- В игре 21 не 36 а 52 карты кстати!!! Последний раз редактировалось -=DeS=-; 20.12.2006 в 12:31. |
20.12.2006, 09:36 | #5 |
Регистрация: 11.12.2006
Сообщений: 5
|
Непомню откуда надёргал,может кому нить пригодица
|
20.12.2006, 09:39 | #6 |
Регистрация: 11.12.2006
Сообщений: 5
|
воть есцо компоненты для карточных игр
|
20.12.2006, 12:23 | #7 |
Форумчанин
Регистрация: 20.12.2006
Сообщений: 135
|
Всё можно сделать стандартными компонентами, например карты TBitBtn!!!
свойство Glyph
writeln('Hello Dude!!!');
Последний раз редактировалось -=DeS=-; 20.12.2006 в 12:35. |
20.12.2006, 13:54 | #8 |
Форумчанин
Регистрация: 01.12.2006
Сообщений: 241
|
Вместо масива можно использовать переменную типа TStrings, тогда смещение делать не надо, элемент будет просто удаляться из списка, а карту выдавать Random(a.count), где а - переменная типа стринг
Програмисты - единственные люди, которым платят за исправления их же ошибок
|
21.12.2006, 16:34 | #9 |
Регистрация: 11.12.2006
Сообщений: 5
|
|
11.01.2007, 12:03 | #10 |
Пользователь
Регистрация: 11.01.2007
Сообщений: 12
|
Множества!!!
А ведь для этих целей как нельзя лучше подходят множества!
Создадим переменную: var koloda: set of byte; Заполним картами: for i:=1 to 52 do koloda:=koloda+[i]; Проверка наличия случайной карты в колоде: repeat card:=random(52)+1; until (card in koloda); Убрать карту из колоды: koloda:=koloda-[card]; Вроде все так, хотя могут быть микронеточности, давно это все было! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
РПГ игра | Принц | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 4 | 10.06.2008 15:57 |
Карточная колода при помощи Switch на С++ | Amen | Общие вопросы C/C++ | 1 | 28.02.2008 08:24 |
Помогите с игрой в Visual Basic (совершенно любая, карточная, домино, дарц и т.д.) | leogirl | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 6 | 13.11.2007 19:18 |
Карточная игра | steck | Общие вопросы Delphi | 3 | 07.10.2007 17:59 |
игра S.T.A.L.K.E.R. | rpy3uH | Свободное общение | 7 | 10.04.2007 00:17 |