Member 13874738 Ответов: 2

Форма окна C++: как я могу разрешить перетаскивание изображения на другое поле изображения, если изображения равны


Я делаю карточную игру в форме c++ windows. Я хотел бы, чтобы графическая коробка с изображением карты была сброшена на стопку карт только в том случае, если масть карты или ее числовое значение совпадают. У меня есть изображения, названные по масти и числовому значению. Я также не уверен, какое событие должно иметь код, где он делает сравнение между двумя объектами. Я ценю любую помощь в этом вопросе. Спасибо.


private: System::Void player1card1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
	if (e->Button == System::Windows::Forms::MouseButtons::Left)
	{
		dragging = true;
		currentX = e->X;
		currentY = e->Y;
		
	}
}
private: System::Void player1card1_MouseMove(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
	//textBox2->Text = imageList1->Images->Keys[2];
	//textBox2->Text = sender->ToString();
	

	if (dragging) {
		player1card1->BringToFront();
		player1card1->Top = player1card1->Top + (e->Y - currentY);
		player1card1->Left = player1card1->Left + (e->X - currentX);
		
		//textBox2->Text = player1card1->AccessibleName->ToString();	
		//textBox2->Text = cardInPlay->AccessibleName->ToString();
		//textBox2->Text = player1card3->AccessibleName->ToString();
		textBox2->Text = player1card2->AccessibleName->ToString();
		
	}
	
}
private: System::Void player1card1_MouseUp(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
	
		 dragging = false;
}



Ниже приведено событие для раздачи карт кнопка нажата:


private: System::Void dealCards_Click(System::Object^  sender, System::EventArgs^  e) {
	//textBox2->Text=imageList1->Images->Keys[1]->ToString();
	
	int rand_ind;
	Random^ rand = gcnew Random;
	for (int i = 0; i < imageList1->Images->Count-1; i++)
	{		
		rand_ind =  (rand->Next(0, 51));//) % (imageList1->Images->Count - i));//generate random index number
		imageList1->Images->Add(imageList1->Images[i]);
		imageList1->Images->Add(imageList1->Images[rand_ind]);
		imageList1->Images->RemoveAt(i);//remove image from current index			
		imageList1->Images->RemoveAt(rand_ind);//remove random image from list		
	}
	cardInPlay->Image = imageList1->Images[1];
	cardInPlay->AccessibleName = imageList1->Images->Keys[1]->ToString();

	player1card1->Image = imageList1->Images[2];
	player1card1->AccessibleName = imageList1->Images->Keys[2]->ToString();

	player1card2->Image = imageList1->Images[3];
	player1card2->AccessibleName = imageList1->Images->Keys[3]->ToString();

	player1card3->Image = imageList1->Images[4];
	player1card3->AccessibleName = imageList1->Images->Keys[4]->ToString();
	player1card4->Image = imageList1->Images[5];
	player1card4->AccessibleName = imageList1->Images->Keys[5]->ToString();
	player1card5->Image = imageList1->Images[6];
	player1card5->AccessibleName = imageList1->Images->Keys[6]->ToString();
	player1card6->Image = imageList1->Images[7];
	player1card6->AccessibleName = imageList1->Images->Keys[7]->ToString();
	player1card7->Image = imageList1->Images[8];
	player1card7->AccessibleName = imageList1->Images->Keys[8]->ToString();
	player2card1->Image = imageList1->Images[9];
	player2card1->AccessibleName = imageList1->Images->Keys[9]->ToString();
	player2card2->Image = imageList1->Images[10];
	player2card2->AccessibleName = imageList1->Images->Keys[10]->ToString();
	player2card3->Image = imageList1->Images[11];
	player2card3->AccessibleName = imageList1->Images->Keys[11]->ToString();
	player2card4->Image = imageList1->Images[12];
	player2card4->AccessibleName = imageList1->Images->Keys[12]->ToString();
	player2card5->Image = imageList1->Images[13];
	player2card5->AccessibleName = imageList1->Images->Keys[13]->ToString();
	player2card6->Image = imageList1->Images[14];
	player2card6->AccessibleName = imageList1->Images->Keys[14]->ToString();
	player2card7->Image = imageList1->Images[15];
	player2card7->AccessibleName = imageList1->Images->Keys[15]->ToString();

}


Что я уже пробовал:

Я попробовал операторы if, которые не допускают падения на x и y, где находится стопка карт, если масть карты и числовое значение не совпадают внутри события перемещения мыши, но это позволило мне бросить карту в стопку.

Rick York

Это управляемый C++, и это важное различие, которое нужно сделать.

2 Ответов

Рейтинг:
15

OriginalGriff

Во-первых, не используйте изображения для определения стоимости карты: создайте класс UserControl под названием PlayingCard, который содержит изображение и включает свойства Suit и Value. Класс рисует сам себя (используя изображение по мере необходимости)
Затем вы создаете класс Deck, который содержит коллекцию объектов PlayingCard и имеет методы Shuffle, Deal и тому подобные.

Затем, когда вы хотите сравнить две карты, вы используете свойства масти и значения отдельных карт, и это очень просто читать, а также писать и поддерживать ...


Member 13874738

Я по-прежнему использовать класс окна формы? Если да, то будет ли класс UserControl использовать какие-либо объекты из класса form?

Рейтинг:
0

Member 13874738

Я по-прежнему использовать класс окна формы? Если да, то будет ли класс UserControl использовать какие-либо объекты из класса form?


Richard Deeming

Это не решение проблемы. Вы уже опубликовали это в качестве комментария к решению 1, которое было правильным местом для его публикации.

Member 13874738

Я понимаю это, но я задал вопрос в отношении решения 1 и не получил ответа, поэтому мне показалось, что я задал вопрос не в том месте.Шрифт области комментариев и вопросов настолько мал, что я не был уверен, что мой вопрос был просмотрен. С этого момента я буду задавать вопросы в этом месте.