• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

aMeScAS

[C++] (Windows Forms Application) Jogo de Palavras

20 mensagens neste tópico

Boas...  :D

Ora eu tenho um projecto, o qual estou a ter umas dificuldades...

A intenção é quando clicar no botao "Jogar" ele irá mostrar a palavra (cada letra em um label, para depois poder alterar a ordem da palavra) mas com as letras trocadas, ou seja, a intrução random faz isso... mas ele, como no meu programa mostra, está a fazer random com as letras da palavra (P,A,L,V,R), mas está a repetir, isto é, por vezes nao mostra o 'V', outras vezes nao mostra o 'A' 3 vezes como é suposto...

A minha ideia é... ter que criar um ciclo qualquer, com um if la dentro... mas nao "pesco" la muito disto ainda, entao gostava de umas ajudas...  :-[

P.S: A ideia é ter numa listbox a Lingua, e noutra ListBox o Tema, e kuando seleccionadas essas 2 opçoes, criar uma palavra.. Agradecia sugestoes de organizaçao de codigo, ou de ideia para estruturar melhor, ou até para criar um melhor jogo...

#pragma once

namespace testingnow {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
///          'Resource File Name' property for the managed resource compiler tool
///          associated with all .resx files this class depends on.  Otherwise,
///          the designers will not be able to interact properly with localized
///          resources associated with this form.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
	Form1(void)
	{
		InitializeComponent();
		  x=gcnew Random();

		//
		//TODO: Add the constructor code here
		//
	}

protected:
	/// <summary>
	/// Clean up any resources being used.
	/// </summary>
	~Form1()
	{
		if (components)
		{
			delete components;
		}
	}
private: System::Windows::Forms::Button^  jogar;
protected: 
private: System::Windows::Forms::Button^  novapalavra;
private: System::Windows::Forms::Button^  limpar;
private: System::Windows::Forms::Button^  movesq;
private: System::Windows::Forms::Button^  movdir;
private: System::Windows::Forms::Button^  sair;
private: System::Windows::Forms::Button^  introduzir;
private: System::Windows::Forms::PictureBox^  pictureBox1;
private: System::Windows::Forms::Label^  titulo;
private: System::Windows::Forms::TextBox^  textBox1;
private: System::Windows::Forms::ListBox^  tema;
private: System::Windows::Forms::ListBox^  lingua;

private: Random^x;
protected: 
private: array<String^>^nomes;

private: array<Label^>^lbl;
private: System::Windows::Forms::Label^  lingualbl;

private: System::Windows::Forms::Label^  temalbl;
private: System::Windows::Forms::Label^  Inslbl;

private:
	/// <summary>
	/// Required designer variable.
	/// </summary>
	System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
	/// <summary>
	/// Required method for Designer support - do not modify
	/// the contents of this method with the code editor.
	/// </summary>
	void InitializeComponent(void)
	{
		this->jogar = (gcnew System::Windows::Forms::Button());
		this->novapalavra = (gcnew System::Windows::Forms::Button());
		this->limpar = (gcnew System::Windows::Forms::Button());
		this->movesq = (gcnew System::Windows::Forms::Button());
		this->movdir = (gcnew System::Windows::Forms::Button());
		this->sair = (gcnew System::Windows::Forms::Button());
		this->introduzir = (gcnew System::Windows::Forms::Button());
		this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
		this->titulo = (gcnew System::Windows::Forms::Label());
		this->textBox1 = (gcnew System::Windows::Forms::TextBox());
		this->tema = (gcnew System::Windows::Forms::ListBox());
		this->lingua = (gcnew System::Windows::Forms::ListBox());
		this->lingualbl = (gcnew System::Windows::Forms::Label());
		this->temalbl = (gcnew System::Windows::Forms::Label());
		this->Inslbl = (gcnew System::Windows::Forms::Label());
		(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->BeginInit();
		this->SuspendLayout();
		// 
		// jogar
		// 
		this->jogar->Location = System::Drawing::Point(42, 124);
		this->jogar->Name = L"jogar";
		this->jogar->Size = System::Drawing::Size(75, 23);
		this->jogar->TabIndex = 0;
		this->jogar->Text = L"&Jogar";
		this->jogar->UseVisualStyleBackColor = true;
		this->jogar->Click += gcnew System::EventHandler(this, &Form1::jogar_Click);
		// 
		// novapalavra
		// 
		this->novapalavra->Location = System::Drawing::Point(31, 153);
		this->novapalavra->Name = L"novapalavra";
		this->novapalavra->Size = System::Drawing::Size(97, 23);
		this->novapalavra->TabIndex = 1;
		this->novapalavra->Text = L"&Nova Palavra";
		this->novapalavra->UseVisualStyleBackColor = true;
		// 
		// limpar
		// 
		this->limpar->Location = System::Drawing::Point(42, 182);
		this->limpar->Name = L"limpar";
		this->limpar->Size = System::Drawing::Size(75, 23);
		this->limpar->TabIndex = 2;
		this->limpar->Text = L"&Limpar";
		this->limpar->UseVisualStyleBackColor = true;
		// 
		// movesq
		// 
		this->movesq->Location = System::Drawing::Point(42, 224);
		this->movesq->Name = L"movesq";
		this->movesq->Size = System::Drawing::Size(75, 38);
		this->movesq->TabIndex = 3;
		this->movesq->Text = L"Mover Letra (Esquerda)";
		this->movesq->UseVisualStyleBackColor = true;
		// 
		// movdir
		// 
		this->movdir->Location = System::Drawing::Point(42, 268);
		this->movdir->Name = L"movdir";
		this->movdir->Size = System::Drawing::Size(75, 42);
		this->movdir->TabIndex = 4;
		this->movdir->Text = L"Mover Letra (Direita)";
		this->movdir->UseVisualStyleBackColor = true;
		// 
		// sair
		// 
		this->sair->Location = System::Drawing::Point(489, 287);
		this->sair->Name = L"sair";
		this->sair->Size = System::Drawing::Size(75, 23);
		this->sair->TabIndex = 5;
		this->sair->Text = L"&Sair";
		this->sair->UseVisualStyleBackColor = true;
		this->sair->Click += gcnew System::EventHandler(this, &Form1::sair_Click);
		// 
		// introduzir
		// 
		this->introduzir->Location = System::Drawing::Point(530, 64);
		this->introduzir->Name = L"introduzir";
		this->introduzir->Size = System::Drawing::Size(83, 44);
		this->introduzir->TabIndex = 6;
		this->introduzir->Text = L"Introduzir Nova Palavra";
		this->introduzir->UseVisualStyleBackColor = true;
		// 
		// pictureBox1
		// 
		this->pictureBox1->Location = System::Drawing::Point(12, 12);
		this->pictureBox1->Name = L"pictureBox1";
		this->pictureBox1->Size = System::Drawing::Size(141, 77);
		this->pictureBox1->TabIndex = 7;
		this->pictureBox1->TabStop = false;
		// 
		// titulo
		// 
		this->titulo->AutoSize = true;
		this->titulo->Location = System::Drawing::Point(56, 42);
		this->titulo->Name = L"titulo";
		this->titulo->Size = System::Drawing::Size(61, 13);
		this->titulo->TabIndex = 8;
		this->titulo->Text = L"logo e titulo";
		// 
		// textBox1
		// 
		this->textBox1->Location = System::Drawing::Point(457, 35);
		this->textBox1->Name = L"textBox1";
		this->textBox1->Size = System::Drawing::Size(156, 20);
		this->textBox1->TabIndex = 9;
		// 
		// tema
		// 
		this->tema->FormattingEnabled = true;
		this->tema->Location = System::Drawing::Point(326, 26);
		this->tema->Name = L"tema";
		this->tema->Size = System::Drawing::Size(73, 43);
		this->tema->TabIndex = 10;
		// 
		// lingua
		// 
		this->lingua->FormattingEnabled = true;
		this->lingua->Location = System::Drawing::Point(222, 26);
		this->lingua->Name = L"lingua";
		this->lingua->Size = System::Drawing::Size(75, 43);
		this->lingua->TabIndex = 11;
		// 
		// lingualbl
		// 
		this->lingualbl->AutoSize = true;
		this->lingualbl->Location = System::Drawing::Point(239, 7);
		this->lingualbl->Name = L"lingualbl";
		this->lingualbl->Size = System::Drawing::Size(39, 13);
		this->lingualbl->TabIndex = 12;
		this->lingualbl->Text = L"Lingua";
		// 
		// temalbl
		// 
		this->temalbl->AutoSize = true;
		this->temalbl->Location = System::Drawing::Point(345, 7);
		this->temalbl->Name = L"temalbl";
		this->temalbl->Size = System::Drawing::Size(34, 13);
		this->temalbl->TabIndex = 13;
		this->temalbl->Text = L"Tema";
		// 
		// Inslbl
		// 
		this->Inslbl->AutoSize = true;
		this->Inslbl->Location = System::Drawing::Point(454, 19);
		this->Inslbl->Name = L"Inslbl";
		this->Inslbl->Size = System::Drawing::Size(96, 13);
		this->Inslbl->TabIndex = 14;
		this->Inslbl->Text = L"Insira uma palavra:";
		// 
		// Form1
		// 
		this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
		this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
		this->ClientSize = System::Drawing::Size(641, 343);
		this->Controls->Add(this->Inslbl);
		this->Controls->Add(this->temalbl);
		this->Controls->Add(this->lingualbl);
		this->Controls->Add(this->lingua);
		this->Controls->Add(this->tema);
		this->Controls->Add(this->textBox1);
		this->Controls->Add(this->titulo);
		this->Controls->Add(this->pictureBox1);
		this->Controls->Add(this->introduzir);
		this->Controls->Add(this->sair);
		this->Controls->Add(this->movdir);
		this->Controls->Add(this->movesq);
		this->Controls->Add(this->limpar);
		this->Controls->Add(this->novapalavra);
		this->Controls->Add(this->jogar);
		this->Name = L"Form1";
		this->Text = L"Jogo de Palavras";
		(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->EndInit();
		this->ResumeLayout(false);
		this->PerformLayout();

	}
#pragma endregion
private: System::Void jogar_Click(System::Object^  sender, System::EventArgs^  e)
		 {
			   String^letra="PALAVRA";
		   int n=letra->Length;
			lbl= gcnew array<Label^>(n);
			 for (int i=0; i<n ; i++)
                  {
                    this->lbl[i]=gcnew Label();
                    this->lbl[i]->Location=System::Drawing::Point(150+60*i,200);
                    this->lbl[i]->Size=System::Drawing::Size(60,90);
				this->lbl[i]->Text=letra[gera(n)].ToString();
				this->Controls->Add(lbl[i]);
                  }
		 }
private: Byte gera(int k)
	  {
		  Byte y=x->Next(0,k);
		  return y;
	  }
#pragma endregion
private: System::Void sair_Click(System::Object^  sender, System::EventArgs^  e) {
this->Close();	
	 }
};
}

Cumps..  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebo a maior parte da estrutura desse programa... Mas isso deve-se principalmente a pouco conhecer Managed C++.

No entanto, para não haver repetição de letras, podes fazer o seguinte: onde tens

	this->lbl[i]->Text=letra[gera(n)].ToString();

quando seleccionas uma letra da palavra, substituis essa letra na String por outro caracter que não vás utilizar nas palavras (pode ser um til, um espaço, ou um algarismo, por exemplo). Da próxima vez que fizeres o gera, comparas a letra seleccionada com o caracter que substituíste para ver se já foi utilizada. Algo assim:

	Byte que=gera(n);
if (letra[que]!='~') {
	lbl[i]->Text=letra[que].ToString();
	letra[que]='~';
}

Não testei o código... mas penso que funciona. Este código é para substituir aquela linha que referenciei antes.

P.S. A substituição de palavras no código é irritante. hissyfit8wr.gif

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, ja tenho o codigo mais elaborado, mas continuo a nao conseguir meter a parte, das letras nao se repetirem e aparecerem todas...

#pragma once


namespace Semana1 {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
///          'Resource File Name' property for the managed resource compiler tool
///          associated with all .resx files this class depends on.  Otherwise,
///          the designers will not be able to interact properly with localized
///          resources associated with this form.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
	Form1(void)
	{
		InitializeComponent();
		  x=gcnew Random();

		//
		//TODO: Add the constructor code here
		//
	}

protected:
	/// <summary>
	/// Clean up any resources being used.
	/// </summary>
	~Form1()
	{
		if (components)
		{
			delete components;
		}
	}
private: System::Windows::Forms::Button^  jogar;
protected: 
private: System::Windows::Forms::Button^  novapalavra;
private: System::Windows::Forms::Button^  limpar;
private: System::Windows::Forms::Button^  movesq;
private: System::Windows::Forms::Button^  movdir;
private: System::Windows::Forms::Button^  sair;
private: System::Windows::Forms::Button^  introduzir;
private: System::Windows::Forms::PictureBox^  pictureBox1;
private: System::Windows::Forms::Label^  titulo;
private: System::Windows::Forms::TextBox^  textBox1;
private: System::Windows::Forms::ListBox^  tema;
private: System::Windows::Forms::ListBox^  lingua;

private: Random^x;
protected: 
private: array<String^>^nomes;
private: array<Label^>^lbl;
private: int n;
private: System::Windows::Forms::Label^  lingualbl;
private: System::Windows::Forms::Label^  temalbl;
private: System::Windows::Forms::Label^  inspalavralbl;
private: System::Windows::Forms::Label^  clica;

private:
	/// <summary>
	/// Required designer variable.
	/// </summary>
	System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
	/// <summary>
	/// Required method for Designer support - do not modify
	/// the contents of this method with the code editor.
	/// </summary>
	void InitializeComponent(void)
	{
		this->jogar = (gcnew System::Windows::Forms::Button());
		this->novapalavra = (gcnew System::Windows::Forms::Button());
		this->limpar = (gcnew System::Windows::Forms::Button());
		this->movesq = (gcnew System::Windows::Forms::Button());
		this->movdir = (gcnew System::Windows::Forms::Button());
		this->sair = (gcnew System::Windows::Forms::Button());
		this->introduzir = (gcnew System::Windows::Forms::Button());
		this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
		this->titulo = (gcnew System::Windows::Forms::Label());
		this->textBox1 = (gcnew System::Windows::Forms::TextBox());
		this->tema = (gcnew System::Windows::Forms::ListBox());
		this->lingua = (gcnew System::Windows::Forms::ListBox());
		this->lingualbl = (gcnew System::Windows::Forms::Label());
		this->temalbl = (gcnew System::Windows::Forms::Label());
		this->inspalavralbl = (gcnew System::Windows::Forms::Label());
		this->clica = (gcnew System::Windows::Forms::Label());
		(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->BeginInit();
		this->SuspendLayout();
		// 
		// jogar
		// 
		this->jogar->Location = System::Drawing::Point(42, 164);
		this->jogar->Name = L"jogar";
		this->jogar->Size = System::Drawing::Size(75, 23);
		this->jogar->TabIndex = 0;
		this->jogar->Text = L"&Jogar";
		this->jogar->UseVisualStyleBackColor = true;
		this->jogar->Click += gcnew System::EventHandler(this, &Form1::jogar_Click);
		// 
		// novapalavra
		// 
		this->novapalavra->Location = System::Drawing::Point(31, 193);
		this->novapalavra->Name = L"novapalavra";
		this->novapalavra->Size = System::Drawing::Size(97, 23);
		this->novapalavra->TabIndex = 1;
		this->novapalavra->Text = L"&Nova Palavra";
		this->novapalavra->UseVisualStyleBackColor = true;
		this->novapalavra->Click += gcnew System::EventHandler(this, &Form1::novapalavra_Click);
		// 
		// limpar
		// 
		this->limpar->Location = System::Drawing::Point(42, 222);
		this->limpar->Name = L"limpar";
		this->limpar->Size = System::Drawing::Size(75, 23);
		this->limpar->TabIndex = 2;
		this->limpar->Text = L"&Limpar";
		this->limpar->UseVisualStyleBackColor = true;
		this->limpar->Click += gcnew System::EventHandler(this, &Form1::limpar_Click);
		// 
		// movesq
		// 
		this->movesq->Location = System::Drawing::Point(187, 273);
		this->movesq->Name = L"movesq";
		this->movesq->Size = System::Drawing::Size(131, 22);
		this->movesq->TabIndex = 3;
		this->movesq->Text = L"Mover Letra (Esquerda)";
		this->movesq->UseVisualStyleBackColor = true;
		this->movesq->Click += gcnew System::EventHandler(this, &Form1::movesq_Click);
		// 
		// movdir
		// 
		this->movdir->Location = System::Drawing::Point(362, 273);
		this->movdir->Name = L"movdir";
		this->movdir->Size = System::Drawing::Size(131, 22);
		this->movdir->TabIndex = 4;
		this->movdir->Text = L"Mover Letra (Direita)";
		this->movdir->UseVisualStyleBackColor = true;
		this->movdir->Click += gcnew System::EventHandler(this, &Form1::movdir_Click);
		// 
		// sair
		// 
		this->sair->Location = System::Drawing::Point(522, 298);
		this->sair->Name = L"sair";
		this->sair->Size = System::Drawing::Size(75, 23);
		this->sair->TabIndex = 5;
		this->sair->Text = L"&Sair";
		this->sair->UseVisualStyleBackColor = true;
		this->sair->Click += gcnew System::EventHandler(this, &Form1::sair_Click);
		// 
		// introduzir
		// 
		this->introduzir->Location = System::Drawing::Point(458, 72);
		this->introduzir->Name = L"introduzir";
		this->introduzir->Size = System::Drawing::Size(155, 20);
		this->introduzir->TabIndex = 6;
		this->introduzir->Text = L"Introduzir";
		this->introduzir->UseVisualStyleBackColor = true;
		// 
		// pictureBox1
		// 
		this->pictureBox1->Location = System::Drawing::Point(12, 12);
		this->pictureBox1->Name = L"pictureBox1";
		this->pictureBox1->Size = System::Drawing::Size(141, 77);
		this->pictureBox1->TabIndex = 7;
		this->pictureBox1->TabStop = false;
		// 
		// titulo
		// 
		this->titulo->AutoSize = true;
		this->titulo->Location = System::Drawing::Point(56, 42);
		this->titulo->Name = L"titulo";
		this->titulo->Size = System::Drawing::Size(61, 13);
		this->titulo->TabIndex = 8;
		this->titulo->Text = L"logo e titulo";
		// 
		// textBox1
		// 
		this->textBox1->Location = System::Drawing::Point(457, 46);
		this->textBox1->Name = L"textBox1";
		this->textBox1->Size = System::Drawing::Size(156, 20);
		this->textBox1->TabIndex = 9;
		// 
		// tema
		// 
		this->tema->FormattingEnabled = true;
		this->tema->Location = System::Drawing::Point(331, 46);
		this->tema->Name = L"tema";
		this->tema->Size = System::Drawing::Size(73, 43);
		this->tema->TabIndex = 10;
		// 
		// lingua
		// 
		this->lingua->FormattingEnabled = true;
		this->lingua->Location = System::Drawing::Point(216, 46);
		this->lingua->Name = L"lingua";
		this->lingua->Size = System::Drawing::Size(75, 43);
		this->lingua->TabIndex = 11;
		// 
		// lingualbl
		// 
		this->lingualbl->AutoSize = true;
		this->lingualbl->Font = (gcnew System::Drawing::Font(L"Comic Sans MS", 10.25F, static_cast<System::Drawing::FontStyle>((System::Drawing::FontStyle::Bold | System::Drawing::FontStyle::Italic)), 
			System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0)));
		this->lingualbl->Location = System::Drawing::Point(227, 21);
		this->lingualbl->Name = L"lingualbl";
		this->lingualbl->Size = System::Drawing::Size(50, 19);
		this->lingualbl->TabIndex = 12;
		this->lingualbl->Text = L"Lingua";
		// 
		// temalbl
		// 
		this->temalbl->AutoSize = true;
		this->temalbl->Font = (gcnew System::Drawing::Font(L"Comic Sans MS", 10.25F, static_cast<System::Drawing::FontStyle>((System::Drawing::FontStyle::Bold | System::Drawing::FontStyle::Italic)), 
			System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0)));
		this->temalbl->Location = System::Drawing::Point(347, 21);
		this->temalbl->Name = L"temalbl";
		this->temalbl->Size = System::Drawing::Size(46, 19);
		this->temalbl->TabIndex = 13;
		this->temalbl->Text = L"Tema";
		// 
		// inspalavralbl
		// 
		this->inspalavralbl->AutoSize = true;
		this->inspalavralbl->Font = (gcnew System::Drawing::Font(L"Comic Sans MS", 10.25F, static_cast<System::Drawing::FontStyle>((System::Drawing::FontStyle::Bold | System::Drawing::FontStyle::Italic)), 
			System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0)));
		this->inspalavralbl->Location = System::Drawing::Point(454, 21);
		this->inspalavralbl->Name = L"inspalavralbl";
		this->inspalavralbl->Size = System::Drawing::Size(143, 19);
		this->inspalavralbl->TabIndex = 14;
		this->inspalavralbl->Text = L"Insira uma palavra:";
		// 
		// clica
		// 
		this->clica->AutoSize = true;
		this->clica->Font = (gcnew System::Drawing::Font(L"Engravers MT", 15.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
			static_cast<System::Byte>(0)));
		this->clica->Location = System::Drawing::Point(519, 129);
		this->clica->Name = L"clica";
		this->clica->Size = System::Drawing::Size(0, 25);
		this->clica->TabIndex = 15;
		// 
		// Form1
		// 
		this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
		this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
		this->ClientSize = System::Drawing::Size(641, 343);
		this->Controls->Add(this->clica);
		this->Controls->Add(this->inspalavralbl);
		this->Controls->Add(this->temalbl);
		this->Controls->Add(this->lingualbl);
		this->Controls->Add(this->lingua);
		this->Controls->Add(this->tema);
		this->Controls->Add(this->textBox1);
		this->Controls->Add(this->titulo);
		this->Controls->Add(this->pictureBox1);
		this->Controls->Add(this->introduzir);
		this->Controls->Add(this->sair);
		this->Controls->Add(this->movdir);
		this->Controls->Add(this->movesq);
		this->Controls->Add(this->limpar);
		this->Controls->Add(this->novapalavra);
		this->Controls->Add(this->jogar);
		this->movdir->Enabled=false;
		this->movesq->Enabled=false;
		this->Name = L"Form1";
		this->Text = L"Jogo de Palavras";
		(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->EndInit();
		this->ResumeLayout(false);
		this->PerformLayout();

	}
#pragma endregion
private: System::Void jogar_Click(System::Object^  sender, System::EventArgs^  e)
		 {
			   String^letra="PALAVRA";
		   int n=letra->Length;
			lbl= gcnew array<Label^>(n);
			 for (int i=0; i<n ; i++)
                  {
				//this->lbl[i]->Name = "lbl {0}",i;
                    this->lbl[i]=gcnew Label();
				this->lbl[i]->Font = (gcnew System::Drawing::Font(L"Engravers MT", 15.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
			static_cast<System::Byte>(0)));
                    this->lbl[i]->Location=System::Drawing::Point(180+60*i,200);
                    this->lbl[i]->Size=System::Drawing::Size(60,90);
				this->lbl[i]->Text=letra[gera(n)].ToString();
   				    this->lbl[i]->Click+=gcnew EventHandler(this,&Form1::label_Click);
				this->Controls->Add(lbl[i]);
                  }
		this->movdir->Enabled=true;
		this->movesq->Enabled=true;
		 }
private: Byte gera(int k)
	  {
		  Byte y=x->Next(0,k);
		  return y;
	  }
#pragma endregion
private: System::Void sair_Click(System::Object^  sender, System::EventArgs^  e) {
this->Close();	
	 }
private: System::Void limpar_Click(System::Object^  sender, System::EventArgs^  e) {
		 for (int i =0; i<lbl->Length; i++)
				{
					delete lbl[i];
					delete lbl[i]->Text;
					clica->Text="";
				}
	 }
private: System::Void movesq_Click(System::Object^  sender, System::EventArgs^  e) {
	if (n > -1)
		 {
		  String^lol=lbl[n]->Text;
		  lbl[n]->Text = lbl[n-1]->Text;
		  lbl[n-1]->Text = lol;
		  n=n-1;
		 }
	 }
private: System::Void label_Click(System::Object^  sender, System::EventArgs^  e) 
	 {
		 n=Array::IndexOf(lbl,sender);
		 clica->Text = lbl[n]->Text;
	 }
private: System::Void movdir_Click(System::Object^  sender, System::EventArgs^  e) {
	if (n > -1)
		 {
		  String^eheh=lbl[n]->Text;
		  lbl[n]->Text = lbl[n+1]->Text;
		  lbl[n+1]->Text = eheh;
		  n=n+1;
		 }
	 }
private: System::Void novapalavra_Click(System::Object^  sender, System::EventArgs^  e) {

	 }
};
}

TheDark kuanto ao teu codigo, nao consigo correr, dá me erro (algo do genero: "property does not have a 'set' method" )...  :)

Alguem dá ideias, sugestoes, criticas? ... alguem pode ajudar nessa parte do codigo? ....

Cumps  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que está aí funciona em teoria ::) mas infelizmente não conheço as propriedades desses componentes.

Se pudesses mandar o projecto inteiro eu podia testar e ver se conseguia resolver... porque não consigo recriá-lo exactamente como tu o fizeste. Nem sequer parecido :;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok... devo dizer que estou a mexer em coisas que não domino... mas assim parece funcionar:

				 for (int i=0; i<n ; i++)
			 {
				 this->lbl[i]=gcnew Label();
				 this->lbl[i]->Font = (gcnew System::Drawing::Font(L"Engravers MT", 15.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
					 static_cast<System::Byte>(0)));
				 this->lbl[i]->Location=System::Drawing::Point(180+60*i,200);
				 this->lbl[i]->Size=System::Drawing::Size(60,90);

				 Byte que=gera(n);

				 while (letra[que] == '~') que=gera(n);

				 lbl[i]->Text=letra[que].ToString();
				 letra[que]='~';

				 this->lbl[i]->Click+=gcnew EventHandler(this,&Form1::label_Click);
				 this->Controls->Add(lbl[i]);
			 }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agradeço-te imenso, pareces estar mxm a esforçar para resolver isso, apesar de n perceber....

Na linha " letra[que]='~';" continua a dar a mensagem de erro: "property does not have a 'set' method" ...  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, duh me. Esqueci-me da parte da declaração da variável letra. Tem que ser um System::Text::StringBuilder porque a String não permite que o seu conteúdo seja alterado. Fica assim:

				 System::Text::StringBuilder^letra=gcnew System::Text::StringBuilder(10);
			 letra->Append(L"PALAVRA");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já funciona.... ;)  o codigo ficou assim:

	private: System::Void jogar_Click(System::Object^  sender, System::EventArgs^  e)
		 {
			   
			System::Text::StringBuilder^letra=gcnew System::Text::StringBuilder(10);
			letra->Append(L"PALAVRA");
		    int n=letra->Length;
			lbl= gcnew array<Label^>(n);
			 for (int i=0; i<n ; i++)
                  {
                    this->lbl[i]=gcnew Label();
				this->lbl[i]->BackColor = System::Drawing::Color::Transparent;
				this->lbl[i]->Font = (gcnew System::Drawing::Font(L"Engravers MT", 15.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
			static_cast<System::Byte>(0)));
                    this->lbl[i]->Location=System::Drawing::Point(180+60*i,200);
                    this->lbl[i]->Size=System::Drawing::Size(60,90);
				Byte que=gera(n); 
				 while (letra[que] == '~') que=gera(n); 
					lbl[i]->Text=letra[que].ToString();
					letra[que]='~';
   				    this->lbl[i]->Click+=gcnew EventHandler(this,&Form1::label_Click);
				this->Controls->Add(lbl[i]);
                  }
		this->movdir->Enabled=true;
		this->movesq->Enabled=true;
		this->jogar->Enabled=false;
		 }

Agora que saber era para adicionar varias palavras... por exemplo, tenho 2 listbox's: uma com a "lingua" outra com o "tema" ...

A intenção é quando se inicia a aplicação, o utilizador primeiro terá de seleccionar a lingua e o tema, para depois ser gerar a palavra relacionada com essa lingua e esse tema... é criado com funçoes e if's ? ou com um switch/case ?

btw, o aspecto gráfico tá assim... tá aprovado?

screendn9.jpg

Cumps..  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora gostava que me explicasses o que faz o seguinte codigo...

Fica assim:

				 System::Text::StringBuilder^letra=gcnew System::Text::StringBuilder(10);
			 letra->Append(L"PALAVRA");

e uma das coisas que o programa esta a dar erro, é por exemplo, se seleccionar a primeira letra, e meter "mover esquerda" (obvio que nao dá, pois ja esta na primeira posiçao) mas o programa crasha... mostra msg de erro e sair do programa... como contornar isso? ...

Cumps ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

				 System::Text::StringBuilder^letra=gcnew System::Text::StringBuilder(10);
			 letra->Append(L"PALAVRA");

A 1ª linha cria uma instância da classe StringBuilder, vazia, com espaço para pelo menos 10 caracteres; a 2ª linha adiciona "PALAVRA" ao fim do objecto criado. Como ele quando é criado fica vazio, o conteúdo é "PALAVRA". O melhor que fazes é ver este artigo da MSDN.

e uma das coisas que o programa esta a dar erro, é por exemplo, se seleccionar a primeira letra, e meter "mover esquerda" (obvio que nao dá, pois ja esta na primeira posiçao) mas o programa crasha... mostra msg de erro e sair do programa... como contornar isso? ...

Tens que alterar os ifs dos métodos movesq_Click e movdir_Click. No movesq só queres executar o código se o n for maior que 0, e não quando for maior que -1: se for 0 significa que já é o caracter mais à esquerda e não pode ser movido. No movdir, só queres executar o código  se o n for menor que (lbl->Length - 1), porque se for lbl->Length já é o caracter mais à direita. Parece-me que fizeste copy-paste e esqueceste-te de alterar a condição :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eheh, obrigadao... :D até agora ta tudo fixe, mas inda me falta umas koisinhas...

por exemplo... a palavra eh gerada aleatoriamente... cada letra fica em um label... depois de alterada a ordem, e a palavra ficar bem, como mostro ao utilizador uma messagebox a dizer que acertou? ...

outra coisa... gostava que ao clicar num botao, abri-se outro form, sem fechar o principal... ja tive a ver msdn e vejo codigos com o Show, showdialog, mdichildren, parent, etc.... mas tento aplicar, e n konsigo kom nenhuma das soluçoes... n sei, devo tar a aplicar mal o codigo.. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

depois de alterada a ordem, e a palavra ficar bem, como mostro ao utilizador uma messagebox a dizer que acertou? ...

Não sei se é esta a tua dúvida, mas tens que guardar a palavra original num campo da classe, e de cada vez que uma letra é movida comparas cada label com cada índice da palavra original.

outra coisa... gostava que ao clicar num botao, abri-se outro form, sem fechar o principal... ja tive a ver msdn e vejo codigos com o Show, showdialog, mdichildren, parent, etc.... mas tento aplicar, e n konsigo kom nenhuma das soluçoes... n sei, devo tar a aplicar mal o codigo.. ;)

Queres abrir outro form igual ao principal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, é mesmo assim, mas como é que defino a palavra original num campo da classe?

Basicamente isso, a ideia é abrir uma janela a mostrar algo tipo 'Créditos' ou 'Sobre...', compreendes?

Acho que para isso irá ser chamado outro formulário mas com formatação diferente.

Eu começei com a ideia de usar o mdichildren e o parent para interligar formulário, mas não sei aplicá-los :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa a demora, mas não tenho andado a 100% de saúde. A gripe eventualmente apanhou-me...

Não te posso ajudar com esse problema. Os meus conhecimentos de programação Windows resumem-se a um bocadinho de win32, e forms não estão de todo incluídos... A parte anterior não tinha nada específico do managed, mas aqui não sei mesmo ajudar. Pode ser que alguém mais saiba.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas eu so agora é que vi isto!!!

isto é .Net ???

nem olhei ainda para o codigo!!! :-[

mas o que queres fazer é uma caixa de dialogo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yah... isso.. cada vez que alteramos uma letra de posiçao, ele supostamente irá verificar a ordem, né? se a ordem corresponder, mostrará essa, dita cuja, caixa de dialogo, senao, kontinuará sem fazer nada ate que o utilizador acerte na combinaçao de palavras.... right? agr km fazer isso? ...  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso acho que é mais uma MessageBox embora tb de para fazer com caixa de dialog!!!

mesmo assim aqui fica....

adicionar uma caixa de dialogo é facil!! :)

primeiro adicionas  visualmente o "novo form" como tu dizes..

para isso no solucion Explorer  tecla direita em cima de header Files

-ADD

-ADD new Item

-Visual C++

--UI

-Windows Form

depois de adicionares fazes o que quiseres no "novo form" por exemplo por um button..

agora tens que ver onde e quando queres que apareca esta nova janela..

por exemplo quando clicares num determinano determinado button do form

1º incluir o ficheiro  #include"Nome.h"

2º no sitio onde queres que apareça crias uma istancia da nova janela 

Nome *n=new Nome();

e mandas desenhar

n->ShowDialog();

nao sei se me fiz entender!!!

mas se nao diz que eu vou tentar me explicar melhor...

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Preciso memo de ajuda pahhh....  :P

Tenho o seguinte codigo :

				//Carregar Palavra
			String^letra;
			Random^ x=gcnew Random();
			letra=dadosram->Tables[0]->Rows[x->Next(0,1)][1]->ToString();
		    int n=letra->Length;
			lbl= gcnew array<Label^>(n);
			 for (int i=0; i<n ; i++)
                  {
                    this->lbl[i]=gcnew Label();
				this->lbl[i]->BackColor = System::Drawing::Color::Transparent;
				this->lbl[i]->Font = (gcnew System::Drawing::Font(L"Engravers MT", 15.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
			static_cast<System::Byte>(0)));
                    this->lbl[i]->Location=System::Drawing::Point(180+60*i,200);
                    this->lbl[i]->Size=System::Drawing::Size(60,90);

				Byte que=gera(n); 
				 while (letra[que] == '&') que=gera(n); 
					lbl[i]->Text=letra[que].ToString();
					letra[que]='&';

   				    this->lbl[i]->Click+=gcnew EventHandler(this,&Form1::label_Click);
				this->Controls->Add(lbl[i]);
                  }
		this->movdir->Enabled=true;
		this->movesq->Enabled=true;
		this->limpar->Enabled=true;
		this->jogar->Visible=false;
		this->novapalavra->Visible=true;
		 }
private: Byte gera(int k)
	  {
		  Byte y=x->Next(0,k);
		  return y;
	  }

Isto nao esta a funcionar, pois na linha:

letra[que]='&';

diz me isto :

"property does not have a 'set' method"

isso estava assim porque tinha o StringBuilder quando era declarado.. agora foi mudado para poder utilizar dados de uma base de dados e nao sei komo alterar este pedaço de codigo...  :wallbash:

HELLPPPP .....  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora