📄 main.c
字号:
#include"header.c"
int
main(void)
{
quit=0; v_temp=0;temp_y=0;flag=1;score=0;
v_score=0;x=1;y=4;v_x=1;v_y=4;temp=0;
initscr();
noecho();
cbreak();
clear_win(g_win,v_win);//初始化数组
start_color();
//////////////////////////////////////logon
///登录画面
win = newwin(10,40,win_y+5,win_x+10);
box(win,0,0);
select_mode (win,&s_flag);
delwin(win);
refresh();
////////////////////////////////init_data初始化窗口以及其他数据
init_data();
//////////////////////////game start方块下落的最外层循环
while( quit ==0)//quit为判断是否要退出的旗子
{
type=type_a;//把临时类型赋值给石头类型,目的实现提示下一个石头
view=view_a;
mvwprintw(win,game_win_y+stone_y+2+2,game_win_width+2+4,"score :%d",score);
wrefresh(win);
wrefresh(game_win);
wrefresh(hint_win);
///////////////////////////////////////////the v_win funtion
//用以完成主操作窗口于机器窗口之间的多进程运行
if(s_flag==1||s_flag==2)
{
mvwprintw(win,game_win_y+stone_y+2+3,game_win_width+2+4,"2p score :%d",v_score);
START://///////如果虚拟窗口已满,跳到这里
if(v_temp==0)
{
v_type=v_type_a;
v_view=v_view_a;
}
if(s_flag==1)
{
temp_y=traversal_v_win(v_win,&v_type,&v_view );
//调用traversal_v_win函数对虚拟窗口进行运算,并返回临时坐标y值
flag=0;
}
}//endif
////////////////////////////////game part内层循环
////////////////////////////////make_game_win用以判断石头是否叠加
while( (t=make_game_win(stone_s,g_win,&type,&view,&x,&y))==0 )
{
del_stone(g_win,&score);/////////消层
if(s_flag==1||s_flag==2)
{
del_stone(v_win,&v_score);
mvwprintw(win,game_win_y+stone_y+2+3,game_win_width+2+4,"2p score :%d",v_score);
show_g_stone(v_win,virtual_win);
show_stone(stone_s,&v_type,&v_view,virtual_win,&v_x,&v_y);
wrefresh(virtual_win);
}
mvwprintw(win,game_win_y+stone_y+2+2,game_win_width+2+4,"score :%d",score);
wrefresh(win);
show_g_stone(g_win,game_win);
show_stone(stone_s,&type,&view,game_win,&x,&y);
wrefresh(game_win);
//////////sure_sign此段代码用来确定方块数组中,有1的最右坐标,并把值保存在全局变量
sure_sign();
////////////////////////////////////hint_fun()实现游戏中提示下一个石头的图形
hint_fun();
///////////////////////////////////for循环为每单位对方块操作的操作次数
for(temp_i=0;temp_i<5;temp_i++)
{
/////////////////////////////////下面语句对机器窗口的操作实现方块的变形和左右移动
////////////////////////////////////the action of v_win
if(s_flag==1)
{
del_stone(v_win,&v_score);
mvwprintw(win,game_win_y+stone_y+2+3,game_win_width+2+4,"2p score :%d",v_score);
if(v_y<temp_y)
v_y++;
if(v_y>temp_y)
v_y--;
show_g_stone(v_win,virtual_win);
show_stone(stone_s,&v_type,&v_view,virtual_win,&v_x,&v_y);
wrefresh(virtual_win);
}//endif
//////////////////////////////////iostream函数对所有方块进行操作
if((i=iostream())==1)
goto out;
}//endfor
x++;/////////石头下落,坐标加一
if(s_flag==1||s_flag==2)/////////////////此为机器窗口部分代码
{
v_x++;// control the drop
///////////////////////////////////////////////////control the v_win
for(i=0;i<12;i++)
if(v_win[0][i]!=0||v_win[1][i]!=0)//////判断是否游戏结束
{
win = newwin(10,20,win_y+5,win_x+10);
box(win,0,0);
refresh();
mvwprintw(win,5,2,"YOU WIN");
wrefresh(win);
sleep(1);goto exit;
}
if((v_t=make_game_win(stone_s,v_win,&v_type,&v_view,&v_x,&v_y))!=0)
{
v_temp=0;//control to hint next stone
v_x=1;v_y=4; flag=1;
goto START; /////如果已经落底,则跳到开始的位置
}
}//endif
}//endwhile内层
//////////////////////////////////ONE stone action end
x=1;y=4;//重置x,y
temp=0;//control to hint next stone
for(i=0;i<12;i++)
if(g_win[0][i]!=0)//////判断是否游戏结束
{
win = newwin(10,20,win_y+5,win_x+10);
box(win,0,0);
refresh();
mvwprintw(win,5,2,"YOU LOSE");
wrefresh(win);
quit=1;sleep(1);
}
} //endwhile
exit:
out: delwin(win);
delwin(hint_win);
delwin(game_win);
if(s_flag==1)
{
delwin(virtual_win);
delwin(vhint_win);
}
endwin();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -