?? textgfx.cpp
字號:
/* BladeMaster 2, a text, rougelike(kinda), arena combat simulation game. Copyright (C) 2002 Blademaster 2 Team, see CREDITS Clone of BladeMaster by Logicom, Inc. Copyright(C) 1990/1993 In no means affliated with the original Blademaster or the original Blademaster creators/programmers. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Useful contact information: Website: blademaster2.sourceforge.net Project page: www.sf.net/projects/blademaster2/ Project Lead (see CREDITS for other members of the developement team) E-Mail: ilswyn@users.sourceforge.net AIM: ilswyn*//* *------------------------------------------------------* | textgfx.cpp textgfx.h | | | | Output all the graphics (text) and menus. | | engine.cpp handles the auctual input to these menus | | | *------------------------------------------------------* */#include <string>#include <ncurses.h>#include <unistd.h> // For sleep#include <stdlib.h> // need this for exit() - Sairax#include "menus.h"#include "arena.h"#include "items.h"#include "players.h" // Player classes, values for charsheet#include "shops.h"#include "globals.h" #include "textgfx.h" // *****************************************************************// NOTE: Standard terminal is 80x25 *// NOTE: I am very repetative on borders, should be fixed later.. *// *****************************************************************// Main Menu (Before entering game)void draw_main_menu(){ attron(A_BOLD); printw("*--= B L A D E M A S T E R II =--*\n\n" "- _ - THE LEGACY CONTINUES - _ -\n\n" " Version 0.15 \n\n" "\t[P]lay\n" "\t[I]nstructions\n" "\t[B]ladeMasters\n" "\t[H]igh Scores\n" "\t[S]et Player Options\n" "\t[L]og of Battles\n\n" "Choose an option, or [Q]uit: "); refresh(); attroff(A_BOLD);}// Check if terminal has color-capabilityvoid check_colors(){ if (!has_colors()) { printw("Terminal does not support colors! Exiting!"); refresh(); sleep(3); exit(1); }}void draw_main_screen(){ // Screen is the whole screen, all subwins are in screen screen = subwin(stdscr, 25, 80, 0, 0); draw_charsheet(); // Draws window charsheet, displays char's info draw_gamemenu(); // Draws the menu in-game (uses same space as the arena) draw_outputmenu(); // Draws the bottom menu for output and options draw_inventory(); // Inventory for items..}// ***********************************************************************// Parts of the main screen, charsheet, gamemenu, outputmenu, inventory *// ***********************************************************************void draw_charsheet(){ charsheet = subwin(screen, 18, 30, 0, 0); wbkgd(charsheet, COLOR_PAIR(1)); box(charsheet, ACS_VLINE, ACS_HLINE); wattron(charsheet, COLOR_PAIR(2)); wattron(charsheet, A_BOLD); mvwprintw(charsheet, 1, 2, "MELEE WEAPON:"); mvwprintw(charsheet, 2, 2, "RANGE WEAPON:"); mvwprintw(charsheet, 3, 2, " ARMOR:"); mvwprintw(charsheet, 4, 2, " PROJECTILES:"); mvwprintw(charsheet, 5, 2, " HEALTH:"); mvwprintw(charsheet, 6, 2, " EXPERIENCE:"); mvwprintw(charsheet, 7, 2, " LEVEL:"); mvwprintw(charsheet, 8, 2, " SCORE:"); mvwprintw(charsheet, 9, 2, " GOLD ON YOU:"); mvwprintw(charsheet, 10, 2, "GOLD IN BANK:"); wattroff(charsheet, COLOR_PAIR(2)); wattron(charsheet, COLOR_PAIR(3)); mvwprintw(charsheet, 1, 16, "%s", ((HumanPlayer*)(arena_obj_list[0]))->getMelee()->getName().c_str()); mvwprintw(charsheet, 2, 16, "%s", ((HumanPlayer*)(arena_obj_list[0]))->getRange()->getName().c_str()); mvwprintw(charsheet, 3, 16, "%s", ((HumanPlayer*)(arena_obj_list[0]))->getArmor()->getName().c_str()); mvwprintw(charsheet, 4, 16, "%d", ((HumanPlayer*)(arena_obj_list[0]))->getProjectiles()); mvwprintw(charsheet, 5, 16, "%d", ((HumanPlayer*)(arena_obj_list[0]))->getHealth()); mvwprintw(charsheet, 6, 16, "%d", ((HumanPlayer*)(arena_obj_list[0]))->getExp()); mvwprintw(charsheet, 7, 16, "%d", ((HumanPlayer*)(arena_obj_list[0]))->getLevel()); mvwprintw(charsheet, 8, 16, "%d", ((HumanPlayer*)(arena_obj_list[0]))->getScore()); mvwprintw(charsheet, 9, 16, "%d", ((HumanPlayer*)(arena_obj_list[0]))->getGoldInHand()); mvwprintw(charsheet, 10, 16, "%d", ((HumanPlayer*)(arena_obj_list[0]))->getGoldInBank()); wattroff(charsheet, COLOR_PAIR(3)); wattroff(charsheet, A_BOLD); wrefresh(charsheet);}void draw_gamemenu(){ // Using future arena space for this menu arena = subwin(screen, 17, 50, 0, 30); whereis = 1; // Player at main screen w/o being in arena.. wbkgd(arena, COLOR_PAIR(4)); wrefresh(arena);}void draw_outputmenu(){ outputm = subwin(screen, 8, 30, 17, 0); wbkgd(outputm, COLOR_PAIR(1)); wborder(outputm, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', '*', '*', '*'); wattron(outputm, A_BOLD); mvwprintw(outputm, 1, 2, "[A]"); mvwprintw(outputm, 2, 2, "[T]"); mvwprintw(outputm, 3, 2, "[W]"); mvwprintw(outputm, 4, 2, "[H]"); mvwprintw(outputm, 5, 2, "[B]"); mvwprintw(outputm, 6, 2, "[Q]"); wattroff(outputm, A_BOLD); mvwprintw(outputm, 1, 5, "rena"); mvwprintw(outputm, 2, 5, "avern"); mvwprintw(outputm, 3, 5, "eapons & Armor Shop"); mvwprintw(outputm, 4, 5, "ealer"); mvwprintw(outputm, 5, 5, "ank"); mvwprintw(outputm, 6, 5, "uit"); wrefresh(outputm);}void draw_inventory(){ inventory = subwin(screen, 8, 51, 17, 29); wbkgd(inventory, COLOR_PAIR(1)); wborder(inventory, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', ACS_URCORNER, '*', ACS_LRCORNER); wattron(inventory, A_BOLD); wattron(inventory, A_UNDERLINE); mvwprintw(inventory, 1, 20, "Inventory"); wattroff(inventory, A_UNDERLINE); wattroff(inventory, A_BOLD); wrefresh(inventory);}// ***********************************************************// Main Option screens: arena, tavern, shop, healer, bank *// ***********************************************************void draw_arena(){ wclear(inventory); wclear(outputm); wclear(arena); draw_enemystats(); wborder(inventory, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', ACS_URCORNER, '*', ACS_LRCORNER); wborder(outputm, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', '*', '*', '*'); // Redraw border since I cleared wattron(outputm, A_BOLD); mvwprintw(outputm, 1, 2, "[A]"); mvwprintw(outputm, 2, 2, "[F]"); mvwprintw(outputm, 3, 2, "[P]"); wattroff(outputm, A_BOLD); mvwprintw(outputm, 1, 5, "ttack with melee weapon"); mvwprintw(outputm, 2, 5, "ire range weapon"); mvwprintw(outputm, 3, 5, "lead for mercy!"); wrefresh(outputm); wattron(inventory, COLOR_PAIR(3)); wattron(inventory, A_BOLD); mvwprintw(inventory, 1, 2, "BATTLE COMMAND:"); wattroff(inventory, COLOR_PAIR(3)); wattroff(inventory, A_BOLD); wrefresh(inventory); }// Screen shown when you kill your opponentvoid draw_victory(){ arena_obj_list[1]->setObjChar( '_' ); ((CompPlayer*)(arena_obj_list[1]))->draw(); wclear(inventory); wattroff(inventory, A_BOLD); wborder(inventory, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', ACS_URCORNER, '*', ACS_LRCORNER); wattroff(inventory, COLOR_PAIR(3)); wattron(inventory, A_BOLD); wattron(inventory, COLOR_PAIR(1)); mvwprintw(inventory, 1, 2, "*** YOU HAVE SLAIN YOUR OPPONENT ***"); wattroff(inventory, COLOR_PAIR(1)); wattron(inventory, COLOR_PAIR(3)); mvwprintw(inventory, 2, 2, " You won X gold pieces."); mvwprintw(inventory, 3, 2, " You gained %d experience points.", ((CompPlayer*)(arena_obj_list[1]))->getExpValue()); mvwprintw(inventory, 4, 2, " Your score increased by Y points."); wattroff(inventory, COLOR_PAIR(3)); wattron(inventory, COLOR_PAIR(2)); mvwprintw(inventory, 6, 2, " Press any key to continue.."); wgetch(inventory); wclear(inventory); wattroff(inventory, COLOR_PAIR(2)); wattroff(inventory, A_BOLD); wborder(inventory, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', ACS_URCORNER, '*', ACS_LRCORNER);}// Screen shown when you dievoid draw_loss(){ arena_obj_list[0]->setObjChar( '_' ); ((HumanPlayer*)(arena_obj_list[0]))->draw(); wclear(inventory); wattroff(inventory, A_BOLD); wborder(inventory, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', ACS_URCORNER, '*', ACS_LRCORNER); wattroff(inventory, COLOR_PAIR(3)); wattron(inventory, A_BOLD); wattron(inventory, COLOR_PAIR(1)); mvwprintw(inventory, 1, 2, " *** YOU HAVE BEEN KILLED ***"); wattroff(inventory, COLOR_PAIR(1)); wattron(inventory, COLOR_PAIR(2)); mvwprintw(inventory, 6, 2, " Press any key to continue.."); wgetch(inventory); wclear(inventory); wattroff(inventory, COLOR_PAIR(2)); wattroff(inventory, A_BOLD); wborder(inventory, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', ACS_URCORNER, '*', ACS_LRCORNER);}// Enemies' hp, weapons etc.void draw_enemystats(){ estats = subwin(charsheet, 8, 30, 10, 0); wborder(estats, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, '*', '*', '*', '*'); wrefresh(estats); wattron(estats, A_BOLD); wattron(estats, COLOR_PAIR(5)); mvwprintw(estats, 1, 2, " -- Enemy --"); mvwprintw(estats, 2, 2, "MELEE WEAPON:"); mvwprintw(estats, 3, 2, "RANGE WEAPON:"); mvwprintw(estats, 4, 2, " ARMOR:"); mvwprintw(estats, 5, 2, " HEALTH:"); mvwprintw(estats, 6, 2, " LEVEL:"); wattroff(estats, COLOR_PAIR(5)); ArenaObject* nearest_comp; nearest_comp = main_arena->get_nearest_type(arena_obj_list[0]->getObjPos(), COMP); wattron(estats, COLOR_PAIR(1)); mvwprintw(estats, 2, 16, "%s", ((CompPlayer*)(nearest_comp))->getMelee()->getName().c_str()); //mvwprintw(estats, 3, 16, "%s", ((CompPlayer*)(nearest_comp))->getRange()->getName().c_str()); mvwprintw(estats, 4, 16, "%s", ((CompPlayer*)(nearest_comp))->getArmor()->getName().c_str()); mvwprintw(estats, 5, 16, "%d", ((CompPlayer*)(nearest_comp))->getHealth()); mvwprintw(estats, 6, 16, "%d", ((CompPlayer*)(nearest_comp))->getLevel()); wattroff(estats, COLOR_PAIR(1)); wattroff(estats, A_BOLD); wrefresh(estats);}// Just using the space from the arena window for this stuff.void draw_tavern(){ wclear(arena); whereis = 3; // Player at main screen and in tavern wattron(arena, A_BOLD); mvwprintw(arena, 1, 14, "Welcome to the Tavern!"); mvwprintw(arena, 2, 4, "[B]"); mvwprintw(arena, 3, 4, "[A]"); mvwprintw(arena, 4, 4, "[W]"); mvwprintw(arena, 5, 4, "[T]"); mvwprintw(arena, 7, 4, "[Q]"); wattroff(arena, A_BOLD); mvwprintw(arena, 2, 7, "eer"); mvwprintw(arena, 3, 7, "le"); mvwprintw(arena, 4, 7, "hiskey"); mvwprintw(arena, 5, 7, "ip the bartender."); mvwprintw(arena, 7, 7, "uit to the main screen."); wrefresh(arena);}void draw_shop(){ wclear(arena); whereis = 4; // Player is at main screen and in shop wattron(arena, A_BOLD); mvwprintw(arena, 1, 7, "Welcome to the Weapon and Armor Shop!"); mvwprintw(arena, 2, 4, "[M]"); mvwprintw(arena, 3, 4, "[R]"); mvwprintw(arena, 4, 4, "[P]"); mvwprintw(arena, 5, 4, "[A]"); mvwprintw(arena, 7, 4, "[Q]"); wattroff(arena, A_BOLD); mvwprintw(arena, 2, 7, " Buy Melee Weapons"); mvwprintw(arena, 3, 7, " Buy Range Weapons"); mvwprintw(arena, 4, 7, " Buy Projectiles"); mvwprintw(arena, 5, 7, " Buy Armor"); mvwprintw(arena, 7, 7, "uit to the main screen."); wrefresh(arena);}void draw_healer(){ wclear(arena); whereis = 5; // Player is in main screen and in healers wattron(arena, A_BOLD); mvwprintw(arena, 1, 14, "Welcome to the Healers!"); mvwprintw(arena, 2, 4, "[A]"); mvwprintw(arena, 3, 4, "[S]"); mvwprintw(arena, 4, 4, "[P]"); mvwprintw(arena, 5, 4, "[D]"); mvwprintw(arena, 7, 4, "[Q]"); wattroff(arena, A_BOLD); mvwprintw(arena, 2, 7, " Heal All Wounds...................%d", healer.getGoldToHeal()); mvwprintw(arena, 3, 7, " Heal Some Wounds..................%d", healer.getGoldPerHp()); mvwprintw(arena, 4, 7, " Neutralize Poison.................%d", healer.getGoldToCurePoison()); mvwprintw(arena, 5, 7, " Cure Disease......................%d", healer.getGoldToCureDisease()); mvwprintw(arena, 7, 7, "uit to the main screen."); wrefresh(arena);}void draw_bank(){ wclear(arena); whereis = 6; // Player is in main screen and in bank wattron(arena, A_BOLD); mvwprintw(arena, 1, 14, "Welcome to the Bank!"); mvwprintw(arena, 2, 4, "[D]"); mvwprintw(arena, 3, 4, "[W]"); mvwprintw(arena, 4, 4, "[S]"); mvwprintw(arena, 7, 4, "[Q]"); wattroff(arena, A_BOLD); mvwprintw(arena, 2, 7, "eposit Gold In Bank"); mvwprintw(arena, 3, 7, "ithdrow Gold From Bank"); mvwprintw(arena, 4, 7, "torage"); mvwprintw(arena, 7, 7, "uit to the main screen."); wrefresh(arena);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -