2011-12-01 2 views
1

Visual Studio 2010 및 Qt 4.7 (두 창 모두)의 C++ 조합을 사용하여 게임을 진행하고 있습니다. 이 게임은 전함의 복제품이며 콘솔 입력 기반입니다. 나는 그것을보고하는 방법을 내 GUI를 생성했으며, Qt는 디자이너의 Qt는 측면에서, 내 GUI는 게임 세포의 픽스맵 개최 라벨을 사용하여 그리드 레이아웃 10 × 10 구성 : 내가 가지고있는Qt : 2 차원 배열 값으로 픽스맵 그리드 레이아웃을 업데이트하십시오.

current look of the game

을 두 번째 배열에서 각 레이블의 위치를 ​​나타 내기 위해 고심했다. (예 : 함대지도 =>F_00 =>F[0,0] =>F[i],[j]). 필자는 속성 편집기를 사용하여 어떤 픽스맵을 표시할지 수동으로 선택할 수 있지만 동적 인 것을 원합니다.

플레이어가 실행 된 후 게임 보드를 다시 그리기 위해 mapboard 클래스를 사용하여 char 배열에 계속 저장합니다. 제 픽스맵을 일반 getupdatearray 유형 함수를 사용하여 업데이트하고 싶습니다. 우리가 배열을 가로 질러 갈 때 배열로부터 그들의 사촌들과 일치하도록 개별 레이블들과 현재 연관된 픽스맵을 갱신 할 것이다. (예를 들어 F[5][6] = 'X' 히트를 들어, 루프는 배열의 해당 위치에 도착 후 때을 empty.png 교체, hit.png 동일하게 F_56에서 픽스맵의 그리드를 업데이트 할 것입니다.

을 나는 아이디어가 이 작업을 수행하는 루프를 만드는 방법,하지만 각 레이블에 대한 픽스맵을 런타임 특성 (런타임) 기능과 비교하여 줄이는 방법에 대해 확신 할 수는 없습니다. QPainter와 다른 기능에 대해 읽었습니다. 이미지를 다루지 만 열심히 노력하는 Qt 클래스

2 차원 배열을 기반으로 픽스맵을 업데이트하는 방법은 무엇입니까?

  1. 루프 구조 - 내가 labels- 그래서 초보자 어떤 아이디어 기압 다루는
  2. Qt는 특정 구문을 알아낼 수 - 내가
  3. 조건 문을 알아낼 수 있습니다.

    #include <QtCore> 
    #include <QtGui> 
    
    // WARNING: PSEUDOCODE, DOES NOT COMPILE 
    // AT A LOSS ON HOW TO SELECT THE CORRECT LABEL 
    // MAYBE A CHILD CLASS FOR THAT? 
    
    class map { 
    public: 
        char updateboard(char mapname, char b[][10]){ 
         for(int i=0;i<10;i++){ 
          for(int j=0;j<10;j++){ 
           char C = b[i][j]; 
           if (C == 'M'){//miss 
            Qlabel mapname_[i][j](<img src='images/missspace.png'/>); 
            mapname_[i][j].show(); 
           } 
           else if(C == 'X'){//hit 
            Qlabel mapname_[i][j](<img src='images/hitspace.png'/>); 
            mapname_[i][j].show(); 
           } 
           else if(C == ' '){//undiscovered space 
            Qlabel mapname_[i][j](<img src='image/emptyspace.png'/>); 
            mapname_[i][j].show(); 
           } 
          } 
         } 
        } 
    }; 
    

    그런 다음 내 mainwindow.cpp에, 나는 map.h을 포함하고 말 : 여기

내가 map.h와 함께 할 노력하고 물건의 종류의 일부 의사의

// calls class function update board 
// takes updated array values and replaces old pixmap with new 

map.updateboard(T,b[][10]); // target map update 
map.updateboard(F,v[][10]); // fleet map update 
사전에

감사

UPDATE :

버튼 프레스로 픽스맵을 바꿀 수있는 지점에 이르렀지만 더 동적 인 무언가를 만들고 싶습니다. 나는 내가 사용 XY 값을 추가하여 사용하여 변경하고자하는 라벨의 이름을 배치하는 Qstring을 사용하고 싶었 :

TR_position.append(QString::number(xvalue)); 

내가 사용하여 전화를 시도 :

ui->TR_position->setPixmap(QPixmap(":/images/missspace.png")); 

.. 분명히 작동하지 않습니다. 케이스를 입력하거나 문자열의 내용을 Qlabel 이름으로 사용하는 방법이 있습니까?

답변