bite815 2022-12-31 11:23 采纳率: 85.7%
浏览 27
已结题

要怎么实现可以用鼠标进行实时修改二维数组的字符,而不是需要用键盘输入坐标进行修改#include <stdio.h>

要怎么实现可以用鼠标进行实时修改二维数组的字符,而不是需要用键盘输入坐标进行修改

#include <stdio.h>
#include <stdlib.h>
#define ROW 11                 //游戏区行数
#define COL 11                 //游戏区列数     

char map[ROW][COL] = {
    {'F', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},   //x为草坪
    {'t', '~', '~', '~', '~', '~', '~', '~', '~', '~'},   //~为水流
    {'t', 't', '~', '~', 't', '~', 't', 't', '~', '~'},   //o为终点
    {'t', '~', 't', 't', '~', '~', '~', '~', '~', '~'},      //t为乌龟
    {'~', 't', '~', '~', '~', '~', 't', '~', '~', '~'},
    {'~', '~', '~', '~', 't', '~', '~', '~', '~', 't'},
    {'t', '~', '~', '~', '~', '~', 't', '~', '~', '~'},
    {'~', 't', 't', 't', '~', 't', '~', '~', 't', '~'},
    {'~', '~', 't', '~', '~', '~', '~', 't', '~', '~'},
    {'~', '~', '~', '~', '~', '~', '~', '~', '~', '~'},
    {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'o', 'x'}
};


int main() {

    int i, j;
    int n = 1;
    int x = 0, y = 0;
    char c;
    while (1) {
        n = 1;
        printf("输入wsad控制青蛙的移动\n");
        printf("输入l添加浮木的位置\n");
        printf("输入k清除浮木需要删除的位置\n");
        printf("输入b添加臭虫的位置\n");
        printf("0   1   2   3   4   5   6   7   8   9   10\n");
        for (i = 0; i < ROW; i++) {
            if (n <= 9)
                printf("%d ", n);
            else
                printf("%d", n);
            n++;
            for (j = 0; j < COL; j++) {
                printf("  %c ", map[i][j]);     //生成游戏界面
            }
            printf("\n");
        }
        printf("请输入操作:\n");
        scanf("%c", &c);                     //w s a d
        getchar();                           //防止重复出现的二维数组
        system("cls");                      //清理屏幕
        static char q = 'x';
        if (c == 'w') {

            map[x][y] = q;
            q = map[x - 1][y];
            map[x - 1][y] = 'F';
            x = x - 1;

        }

        else if (c == 's') {
            map[x][y] = q;
            q = map[x + 1][y];
            map[x + 1][y] = 'F';

            x = x + 1;

        }

        else if (c == 'a') {
            map[x][y] = q;
            q = map[x][y - 1];
            map[x][y - 1] = 'F';

            y = y - 1;

        }

        else if (c == 'd') {
            map[x][y] = q;
            q = map[x][y + 1];
            map[x][y + 1] = 'F';

            y = y + 1;

        }

        else if (c == 'l') {
            int a, b;
            printf("添加浮木:请输入浮木放置的横坐标和纵坐标\n");//添加浮木
            scanf("%d%d", &a, &b);
            getchar();
            map[b - 1][a - 1] = 'L';

        }

        else if (c == 'k') {
            int a, b;
            printf("清除浮木:请输入需要清除浮木的横坐标和纵坐标\n");//清除浮木
            scanf("%d%d", &a, &b);
            getchar();
            if (map[b - 1][a - 1] == 'L') {
                map[b - 1][a - 1] = '~';
            } else if (map[b - 1][a - 1] == '~' || map[b - 1][a - 1] == 'F' || map[b - 1][a - 1] == 't' || map[b - 1][a - 1] == 'x'
                       || map[b - 1][a - 1] == 'B') {
                printf("该位置没有浮木");
            }
        }



        else if (c == 'b') {
            int a, b;
            printf("请输入臭虫放置的横坐标和纵坐标\n");           //添加臭虫
            scanf("%d%d", &a, &b);
            getchar();
            if (map[b - 1][a - 1] == 'L') {
                map[b - 1][a - 1] = 'B';
            } else if (map[b - 1][a - 1] == '~' || map[b - 1][a - 1] == 'F' || map[b - 1][a - 1] == 't' || map[b - 1][a - 1] == 'x')
                printf("臭虫没有放在浮木上\n");
        }
        if ( q == '~' || q == 'B') {
            printf("game over\n");
            break;
        } else if (q == 'o') {
            printf("Congratulations on winning\n");
            break;
        }

    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2022-12-31 14:28
    关注
    #include <gtk/gtk.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define ROW 11
    #define COL 11
    
    char map[ROW][COL] = {
        {'F', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},
        {'t', '~', '~', '~', '~', '~', '~', '~', '~', '~'},
        {'t', 't', '~', '~', 't', '~', 't', 't', '~', '~'},
        {'t', '~', 't', 't', '~', '~', '~', '~', '~', '~'},
        {'~', 't', '~', '~', '~', '~', 't', '~', '~', '~'},
        {'~', '~', '~', '~', 't', '~', '~', '~', '~', 't'},
        {'t', '~', '~', '~', '~', '~', 't', '~', '~', '~'},
        {'~', 't', 't', 't', '~', 't', '~', '~', 't', '~'},
        {'~', '~', 't', '~', '~', '~', '~', 't', '~', '~'},
        {'~', '~', '~', '~', '~', '~', '~', '~', '~', '~'},
        {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'o', 'x'}};
    
    static void draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
    {
        for (int i = 0; i < ROW; i++)
        {
            for (int j = 0; j < COL; j++)
            {
                char c = map[i][j];
                double x = j * 50;
                double y = i * 50;
                if (c == 'x')
                    cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
                else if (c == 't')
                    cairo_set_source_rgb(cr, 0, 0, 1);
                else if (c == '~')
                    cairo_set_source_rgb(cr, 0, 0, 1);
                else if (c == 'o')
                    cairo_set_source_rgb(cr, 1, 0, 0);
                else
                    cairo_set_source_rgb(cr, 0, 0, 0);
                cairo_rectangle(cr, x, y, 50, 50);
                cairo_fill(cr);
            }
        }
    }
    
    static gboolean button_press_event_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
    {
        int x = event->x / 50;
        int y = event->y / 50;
        printf("Clicked at (%d, %d)\n", x, y);
        if (event->button == GDK_BUTTON_PRIMARY)
            map[y][x] = 't';
        else if (event->button == GDK_BUTTON_SECONDARY)
            map[y][x] = '~';
        gtk_widget_queue_draw(widget);
        return TRUE;
    }
    
    int main(int argc, char *argv[])
    {
        gtk_init(&argc, &argv);
        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), "Frogger");
        gtk_window_set_default_size(GTK_WINDOW(window), COL * 50, ROW * 50);
        GtkWidget *drawing_area = gtk_drawing_area_new();
        gtk_container_add(GTK_CONTAINER(window), drawing_area);
        g_signal_connect(G_OBJECT(drawing_area), "draw", G_CALLBACK(draw_cb), NULL);
        g_signal_connect(G_OBJECT(drawing_area), "button-press-event", G_CALLBACK(button_press_event_cb), NULL);
        g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
        gtk_widget_show_all(window);
        gtk_main();
        return 0;
    }
    

    仅供参考,望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 创建了问题 12月31日

悬赏问题

  • ¥50 微信聊天记录备份到电脑提示成功了,但还是没同步到电脑微信
  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!