⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textgfx.cpp

📁 with vxworks we can develope a group of control software for industry.
💻 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 + -