鱼C论坛

 找回密码
 立即注册
查看: 1727|回复: 7

多个链表里的int变量加减

[复制链接]
发表于 2020-5-29 18:47:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <graphics.h>
#include <windows.h>
#include <mmsystem.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#pragma comment (lib,"winmm.lib")

constexpr auto WINDOWSLENGTH = 640;
constexpr auto WINDOWSHIGHT = 480+20;


IMAGE background, apple1, apple2;
//字母结构体
typedef struct Letter
{
    //数据域
    int x, y;//字母坐标
    char ch;//字母ASCII码
    //指针域;
    struct Letter* pnext = NULL;
}LETTER;
typedef LETTER* Pt_letter;

//初始化函数
char str[10];
void GameInit()
{
    srand((unsigned int)time(NULL));//随机数种子
    //初始化窗口
    initgraph(WINDOWSLENGTH, WINDOWSHIGHT);
    //初始化背景音乐
    mciSendString(L"open ./AppleGame/3.mp3", 0, 0, 0);
    mciSendString(L"play ./AppleGame/3.mp3", 0, 0, 0);
    //加载图片
    loadimage(&background,L"./AppleGame/0.png", WINDOWSLENGTH, WINDOWSHIGHT);
    loadimage(&apple1, L"./AppleGame/1.png",50,50);
    loadimage(&apple2, L"./AppleGame/2.png",50,50);

    settextstyle(25, 20, L"宋体");
    setbkmode(0);
}
//创建链表头结点
Pt_letter Listinit()
{
    Pt_letter p = (Pt_letter)malloc(sizeof(LETTER));
    if (p == NULL)
    {
        return 0;
    }
    p->pnext = NULL;
    return p;
}
//输出图片
void GamePoint(Pt_letter pletter)
{

    BeginBatchDraw();//批量绘制
    //背景图片
    putimage(0, 0, &background);
    //苹果
    putimage(0, 0, &background);
    //字母
    pletter = pletter->pnext;
    while (pletter != NULL)
    {
        
        putimage(pletter->x - 14, pletter->y - 17, &apple2,SRCPAINT);//三光栅,把apple2变透明,这个是win
        putimage(pletter->x-14, pletter->y-17, &apple1,SRCAND);
        outtextxy(pletter->x, pletter->y, pletter->ch);
        
        pletter = pletter->pnext;
    }
    
    //putimage(100, 100, &apple1);//为了测试苹果和字母的关系
    //outtextxy(100+14, 100+17,L"B");
    EndBatchDraw();
}
//添加链表结点
void AddListNode(Pt_letter pletter)
{
    //为了释放方便,用尾插法
    while (pletter->pnext != NULL)
    {
        pletter = pletter->pnext;
    }
    Pt_letter pnode = (Pt_letter)malloc(sizeof(LETTER));
    pnode->x = rand() % 591 + 14;
    pnode->y = 17;
    pnode->ch = rand() % 26 + 'A';
    pnode->pnext = pletter->pnext; //为了让这个结点的pnext指向NULL
        pletter->pnext = pnode; //把头结点和下一个结点相连,从第二次开始,作用就是连接各个结点。

}

void AppleMove(Pt_letter pletter , int speedy)
{
    int speedx = 1;
    Pt_letter pfront = pletter;
    pletter = pletter->pnext;
    while (pletter != NULL)
    {
        pletter->y += speedy;
        if (rand() % 2 == 0)
            pletter->x += speedx;
        else
            pletter->x -= speedx;
        if (pletter->y >= WINDOWSHIGHT)
        {
            pfront->pnext = pletter->pnext;
            free(pletter);
            pletter = pfront;
        }
        pletter = pletter->pnext;
    } 
}
//删除结点
void FreePnode(Pt_letter pletter, char key)
{
    int score = 0;
    Pt_letter pfront = pletter;//再pletter的前面的结点
    
    pletter = pletter->pnext;
    while (pletter != NULL )
    {
        if (pletter->ch ==  key || pletter ->ch == key +'A')
        {
            pfront ->pnext = pletter->pnext;
            free(pletter);
            score = 10;
            break;
        }
        else
        {
            pfront = pfront -> pnext;
            pletter = pletter->pnext;
        }
    }
  
}
int main()
{
    
    GameInit();
    Pt_letter pletter = Listinit();
    DWORD t1, t2 ,tt1 ,tt2;
    int speedy = 2;
    char key;
    int score = 0;
    tt1 = GetTickCount();
    t1 = GetTickCount();
    
    while(1)
    {
        
        t2 = GetTickCount();
        if (t2 - t1 >= 1000)
        {
            AddListNode(pletter);
            
            t1 = t2;
        }
        tt2 = GetTickCount();
        if (tt2 - tt1 >= 20)
        {
            AppleMove(pletter, speedy);
            tt1 = tt2;
        }
        GamePoint(pletter);

        //删除链表
        if (_kbhit())
        {
            key = _getch();
            //调节速度 六个档,这里可以随着速度来变换歌曲。。。。。。。。。。。。。暂时还不会
            if (key == '1')            
                speedy = 1;           
            if (key == '2')
                speedy = 6;          
            if (key == '3')            
                speedy = 10;          
             FreePnode(pletter, key);
        }               
    }
    

    
    system("pause");
    return 0;
}

97-117也就是void AppleMove(Pt_letter pletter , int speedy)这个函数,不知道是怎么往下走和横着变换的,他不就循环一次就进入下一个链表里了吗,怎么能移动到最下面呢。
56-74也就是void GamePoint(Pt_letter pletter)这个函数,和上面同问,进入循环一次就进入下一次链表,怎么连环输出图片的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-29 18:51:05 | 显示全部楼层

回帖奖励 +3 鱼币

鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-29 21:18:30 | 显示全部楼层

不能老这样吧,拿钱不办事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 21:35:26 | 显示全部楼层
Juniorboy 发表于 2020-5-29 21:18
不能老这样吧,拿钱不办事


你见我发的欧拉计划的翻译里面,有拿了钱做了题的吗?没错我在为自己白嫖找借口
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 22:29:50 | 显示全部楼层

回帖奖励 +3 鱼币

永恒的蓝色梦想 发表于 2020-5-29 21:35
你见我发的欧拉计划的翻译里面,有拿了钱做了题的吗?没错我在为自己白嫖找借口

老哥这么多荣誉还缺鱼币?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-30 07:57:42 | 显示全部楼层
麻麦皮 发表于 2020-5-29 22:29
老哥这么多荣誉还缺鱼币?

我没什么鱼币,都扔到竞价榜上玩了,因为基本也用不到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-30 17:46:15 | 显示全部楼层

回帖奖励 +3 鱼币

鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-1 22:24:39 | 显示全部楼层
别沉啊,别沉啊~别光领鱼币啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 17:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表