最近突发奇想,想起了当年和小伙伴们一起奋斗在村里黑网吧的日子。于是乎,萌发了动手写一个小游戏的念头。这个经典的小游戏名字叫“魔塔”。大致就是你是一个骑士什么的,深入魔塔拯救大妹子的故事。
设计思路还是很简单的,具体就是一些C/C++图形库的引用,将收集好的图片素材显示在界面上各个位置,然后通过接受键盘输入控制角色移动,碰到道具之后修改角色本身各项的数值来模拟打斗场景。 加入游戏背景音乐,加入其它一些功能后,就有了完整版的魔塔小游戏。
我们来看一下整个的制作过程:
首先是图形库的使用方法:
一、改变文字的颜色:
int color(int num) //num为每一种颜色所代表的数字,范围时0~15
{
SetConsoleTextAttribute(GetStdhandle(STD_OUTPUT_HANDLE),num);
return0;
}
SetConsoleTextAttribute是设置控制台窗口字体颜色和背景色的函数。
二、对光标所在位置进行修改
例如,如果我们想在屏幕中央打印“hello world”,我们可能会这样做:
printf(“ hello world\n”);
这样做是不是很麻烦呢?需要打印n个空格。
这是,我们可以通过自定义函数来实现将光标移动到指定位置:
void gotoxy(int x,int y)
{
COORDpos;
Pos.X=x; //横坐标
Pos.Y=y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
使用SetConsoleCursorPosition函数来实现对光标位置的定位,COORD pos是一个结构体变量,其中X和Y是它的成员,通过修改pos.X 和 pos.Y的值实现对光标的修改
3.图形库的使用
///*
// 1.创建可视化窗口
//
// 1.1 initgraph(int width int height)
// 1.2 closegaph()//关闭窗口
// 2.贴图操作
// 2.1 IMAGE img;
// 2.2 变量和图片绑定 loadimage(&img,"IMGURL");
// 2.3 显示图片 putimage(int x, int y,&img);
// 3.语言
// 4.交互
// 5.用户交互:按键交互
//
//*/
///*
//颜色的表示:
//1 颜色宏表示颜色 大写英语
//2 三原色RGB自行配置
//空心画:
//rectangle(0, 0, 100, 100); 画一个矩形 左上角坐标+右下角坐标
//circle(100, 100, 50); 画一个圆 圆心坐标+半径大小
//填充:
//1.有边界线:
// fillrectangle();fillcircle();
//2.无边界线:
// solidrectangle();solidcircle();
//
//
// 颜色设置:
// 1.背景颜色:
// setbkcolor();
// cleardevice;
// 2.线颜色
// setlinecolor(RED);
// 3.文字颜色
// settextcolor();
//
// 4填充颜色
// 文字输出:
// 只能输出字符串:
//
// 1.输出文字
// outtextxy(int x,int y,char *str);
//
// 2.去掉文字背景
// setbkmode(TRANSPARENT);
// 3. 文字字体设置
// 1. 文字格式设置
// settextstyle(25,0,char *frontName)
//
//
//
//
//*/
//#include<iostream>
//#include<graphics.h>
//#include<stdlib.h>
//#include<conio.h>
//using namespace std;
//int main()
//{
// initgraph(640, 480);//界定窗口的大小
// IMAGE mm;
// //for (int i = 0; i < 640; i+=10)
// //{
// // setlinecolor(RED);
// // putpixel(i, 240, RED);//画一个点
// // line(0, 0, i, 240);//画一条线
// //}
// //
// //rectangle(0, 0, 100, 100);
// //setfillcolor(BLUE);//填充颜色
// //fillrectangle(50, 50, 200, 200);
// /*setlinecolor(RGB(254, 188, 252));
// fillcircle(100+100, 100+100, 50);*/
// for (int i = 0; i < 300; i += 20)
// {
// settextcolor(BLUE);
// settextstyle(i, 0, "宋体");
// //setbkmode(TRANSPARENT);
// cleardevice();
// outtextxy(100, 100, "sadasdasd456465");
// Sleep(500);
// //system("cls");
// }
// cin.get();
// closegraph();
// cin.get();
// cin.get();
// return 0;
//}