level 13
1:r挑战型
原理:用curses实现
// //////////////////////////////////////
// File : center print.c
// Author : Savage
// About : center print
// Ver:1.0
// Savage (C) 2017
// EM:log2.0😖@😍163.com
// //////////////////////////////////////
#include <ncurses.h>
#include <unistd.h>
int foo(WINDOW * win, const char *str) {
wmove(win, ((win)->_maxy + 1 - strlen(str)) / 2,
((win)->_maxx + 1 - strlen(str)) / 2);
return wprintw(win, "%s", str);
}
int foo(const char *str) {
if (!stdscr) {
initscr();
cbreak();
intrflush(stdscr, FALSE);
foo(stdscr, str);
wrefresh(stdscr);
getch();
sleep(1);
endwin();
} else {
return foo(stdscr, str);
}
}
int main() {
foo("Hello!Savage.");
getchar();
return 0;
}
2017年01月28日 21点01分
18
原来是em的错
2017年01月28日 21点01分
level 13
2:传统型
原理:用printf的*实现
// //////////////////////////////////////
// File : center print.c
// Author : Savage
// About : center print
// Ver:2.0
// Savage (C) 2017
// EM:log2.0😌@1😍63.com
// //////////////////////////////////////
#include <stdio.h>
#include <unistd.h>
#include <sys/ioctl.h>
#define TCGETXY 21523
void foo(const char *str)
{
struct {
unsigned short x;
unsigned short y;
unsigned short _x;
unsigned short _y;
}size;
ioctl(0, TCGETXY , (char *)&size);
printf("%*s",(size.x/2-1)*size.y+(size.y+strlen(str))/2,str);
}
int main() {
foo("Hello!Savage.");
getchar();
}
2017年01月28日 21点01分
26
level 13
3:实用型
原理:用conio实现
++++--+-+-++-+-+---+-+--+--+-++-+-+-++-+--++-+-+-+-++-++-+---+--++++--+-+-+-
实现了!神奇吧!
2017年01月28日 21点01分
27
level 13
4:作业
请用上面3条知识点推论第3条是否正确有效,如正确那输出效果是什么样的?如不正确请给出正确算法代码。请自主完成,不得剽窃!
2017年01月28日 21点01分
28
level 12
/*
* 基于 curses 库的居中实现!
* PS: 其实很简单!
* BUG: 中文输出会乱码!
*/
#include<stdio.h>
#include<curses.h>
//#include<locale.h>
int main( )
{
//setlocale(LC_ALL,"");
char *s = "ju_zhong";
initscr( );
clear( );
move(LINES/2+2, COLS/2-strlen(s)/2);//光标定位到居中
addstr(s); //输出函数
refresh( );
getch( );
endwin();
return 0;
}
2017年01月29日 08点01分
30
conio。h也简单
2017年01月29日 09点01分
你试试宽字符看看
2017年01月29日 09点01分
这个和第一条是一样的实现原理对不对?
2017年01月29日 12点01分
@savage200 LINES是个宏获取win._maxx/y
2017年01月29日 12点01分
level 13
#define DARWIN_FORCE_BUILTIN
#include "../headers/darwin.hpp"
#include <string>
int main()
{
darwin::runtime.load("./darwin.module");
darwin::runtime.fit_drawable();
auto pic = darwin::runtime.get_drawable();
std::string greeting = "Hello,World!";
darwin::pixel p(' ', true, false, darwin::colors::red, darwin::colors::white);
for (std::size_t x = 0; x < greeting.size() && x < pic->get_width(); ++x)
{
p.set_char(greeting[x]);
pic->draw_pixel(0.5 * (pic->get_width() - greeting.size()) + x, 0.5 * pic->get_height(), p);
}
darwin::runtime.update_drawable();
return 0;
}
2017年01月29日 11点01分
32
hpp是神马
2017年01月29日 14点01分
level 13
把30楼的改下,支持中文。
#include<stdio.h>
#include<curses.h>
void foo(const wchar_t * str) {
initscr();
endwin();
printf("\x1B[2J\x1B[0;0f");
printf("%*ls", COLS * (LINES / 2 - 1) + COLS / 2 + wcslen(str) * 2, str);
}
int main() {
foo(L "紫怡果椰");
getchar();
return 0;
}
2017年01月29日 13点01分
35
原来改成宽字符就行了!通过curses库玩控制台挺有意思的。想做控制台小游戏的可以看看这本书:<<UNIX Linux下curses库开发指南>>介绍的很详细,CSND有PDF的下载!
2017年01月30日 00点01分