軟體工程反覆式開發法第三篇

來源:互聯網
上載者:User

標籤:

今天將之前的使用者介面顯示的內容集合到了一個函數中,並且增加了螢幕左上方的角色狀態列,並且加入了魔法這項狀態。介面與所示:

因為還沒有技能,所以魔法還不能減。這也是為之後加入技能做出準備。圖中灰色的框是頭像框,灰色方塊是預設的頭像。

整合代碼如下:

/*繪製UI介面*/void Player::paintUI(){    //計算使用者介面的x,y值    double x, y;    x = wx;    y = wy;    if (x < 1)        x = 1;    else if (x > mapmax - 1)        x = mapmax - 1;    if (y < 1)        y = 1;    else if (y > mapmax - 1)        y = mapmax - 1;    /*下面是顯示經驗條模組*/    //顯示經驗框    glColor3f(0.8, 0.8, 0.8);    glBegin(GL_POLYGON);    glVertex2f(x - 1, y - 0.982);    glVertex2f(x + 1, y - 0.982);    glVertex2f(x + 1, y - 1);    glVertex2f(x - 1, y - 1);    glEnd();    glColor3f(0.6, 0.2, 1);    //顯示經驗條    glRectf(x - 1, y - 0.985, x - 1 + ((double)exp / (double)maxexp) * 2, y - 0.998);    /*顯示經驗條模組到此為止*/    /*下面是顯示螢幕左上方的頭像及血量框*/    //畫出頭像框    glColor3f(1, 1, 1);    glBegin(GL_LINE_LOOP);    glVertex2f(x - 0.96, y + 0.925);    glVertex2f(x - 0.83, y + 0.925);    glVertex2f(x - 0.83, y + 0.73);    glVertex2f(x - 0.96, y + 0.73);    glEnd();    //畫狀態框(血條什麼的)    //血條    glColor3f(1, 1, 1);    glBegin(GL_LINE_LOOP);    glVertex2f(x - 0.83, y + 0.925);    glVertex2f(x - 0.5, y + 0.925);    glVertex2f(x - 0.5, y + 0.85);    glVertex2f(x - 0.83, y + 0.85);    glEnd();    //魔法條    glColor3f(1, 1, 1);    glBegin(GL_LINE_LOOP);    glVertex2f(x - 0.83, y + 0.85);    glVertex2f(x - 0.5, y + 0.85);    glVertex2f(x - 0.5, y + 0.78);    glVertex2f(x - 0.83, y + 0.78);    glEnd();    //狀態條(待加)    /*左上方頭像框模組顯示完畢*/    /*下面是顯示螢幕左上方的頭像及血量*/    //畫頭像    glColor3f(0.7, 0.7, 0.7);    glBegin(GL_POLYGON);    glVertex2f(x - 0.959, y + 0.924);    glVertex2f(x - 0.8305, y + 0.924);    glVertex2f(x - 0.8305, y + 0.731);    glVertex2f(x - 0.959, y + 0.731);    glEnd();    //畫實際血條    glColor3f(1, 0, 0);    glBegin(GL_POLYGON);    glVertex2f(x - 0.829, y + 0.924);    glVertex2f(x - 0.829 + (hp / maxhp)*0.3285, y + 0.924);    glVertex2f(x - 0.829 + (hp / maxhp)*0.3285, y + 0.851);    glVertex2f(x - 0.829, y + 0.851);    glEnd();    //畫實際魔法條    glColor3f(0, 0, 1);    glBegin(GL_POLYGON);    glVertex2f(x - 0.829, y + 0.849);    glVertex2f(x - 0.829 + (mp / maxmp)*0.3285, y + 0.849);    glVertex2f(x - 0.829 + (mp / maxmp)*0.3285, y + 0.781);    glVertex2f(x - 0.829, y + 0.781);    glEnd();    /*頭像及血量顯示完畢*/    /*顯示血量數值以及魔法量數值*/    //顯示血量    char buf[20];    glColor3f(1, 1, 1);    sprintf(buf, "%.0lf/%.0lf", hp, maxhp);    glRasterPos2f(x - 0.69, y + 0.877);    drawString(buf);    //顯示魔法    glColor3f(1, 1, 1);    sprintf(buf, "%.0lf/%.0lf", mp, maxmp);    glRasterPos2f(x - 0.69, y + 0.805);    drawString(buf);    //顯示等級    glColor3f(1, 1, 1);    sprintf(buf, "lv:%d", lv);    glRasterPos2f(x - 0.915, y + 0.68);    drawString(buf);    /*顯示狀態數值完畢*/}

因為所有使用者介面都是跟著鏡頭走的,所以只要在一開始計算出視角位置,剩下的只是畫圖的話就很簡單。耗費時間的只是試出位置與大小。

至於mp和maxmp兩項如何添加只能看最終版本,因為改動的地方實在是太多了。

 

當然今天還修複了一個bug,就是當使用者殺怪後只在用戶端漲了經驗值,伺服器並沒有計算增加的經驗值。這個沒辦法顯示。下面是代碼:

//查詢殺死這個怪物的使用者list<client>::iterator it3;for (it3 = CL1.begin(); it3 != CL1.end(); it3++) {     if (id == it3->p.id) {         break;     }}it3->p.exp += getexp;            //加經驗

這個是在服務端的Monster.cpp中實現的。服務端當怪物被殺的時候會重建一個新的怪物,就是在這個時候給殺死這個怪的玩家加上相應的經驗。我們通過殺死這個怪物的玩家的id在玩家鏈表中尋找出相對應的玩家,把他的經驗加上。

 

此外關於人物下線時屬性的記錄(我們現在是將之寫入txt),由於加入了一個mp屬性,需要修改的地方略多,我還沒有完全改完,所以在重新登陸時使用者的mp會出現一些問題。明日會著重解決這個問題。

軟體工程反覆式開發法第三篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.