• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > win32 api实现2048游戏示例

win32 api实现2048游戏示例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了win32api,python win32api,win32 api中文手册,win32api手册,win32api下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

自学的win32编程,写了一个win32 API版2048,自己摸索着写的,按上下左右箭头开始游戏


void newNum()
{
 int num = 0;//一个在0至9之间的书
 int xPos = 0, yPos = 0;
 srand(time(0));
 do{
  xPos = rand() % 4;
  yPos = rand() % 4;
 } while (arr[xPos][yPos] != 0);
 num = rand() % 10;
 if (num < 7)
  arr[xPos][yPos] = 2;
 else
  arr[xPos][yPos] = 4;
}

//画数组函数
void DrawCanvas(HWND hwnd)
{
 HBRUSH hBrush;
 HDC hdc;
 RECT rt;
 TCHAR szBuffer[10];
 for (int i = 0; i < 4; i++)
 {
  for (int j = 0; j < 4; j++)
  {
   if (arr[i][j] != 0)
   {
    LOGFONT logfont;
    hdc = GetDC(hwnd);
    //设置数字的字体大小
    ZeroMemory(&logfont, sizeof(LOGFONT));
    logfont.lfCharSet = GB2312_CHARSET;
    logfont.lfHeight = -50; //设置字体的大小
    HFONT hFont = CreateFontIndirect(&logfont);
    SetTextColor(hdc, RGB(255, 255, 255));
    SetBkColor(hdc, RGB(200, 200, 0));
    SetBkMode(hdc, TRANSPARENT);
    SelectObject(hdc, hFont);
    //创建画刷
    hBrush = CreateSolidBrush(RGB((arr[i][j] * 10) % 256, (arr[i][j]*40)%256, 0));
    SetRect(&rt, j * 100, i * 100, j * 100 + 100, i * 100 + 100);
    FillRect(hdc, &rt, hBrush);
    TextOut(hdc, j * 100 , i * 100 + 25, szBuffer, wsprintf(szBuffer, TEXT("%d"), arr[i][j]));
    ReleaseDC(hwnd, hdc);
    DeleteObject(hBrush);
   }
   else
   {
    SetRect(&rt, j * 100, i * 100, j * 100 + 100, i * 100 + 100);
    hdc = GetDC(hwnd);
    hBrush = CreateSolidBrush(RGB(200, 250, 0));
    FillRect(hdc, &rt, hBrush);
    ReleaseDC(hwnd, hdc);
    DeleteObject(hBrush);
   }
  }
 }
}
//判断数组是否满了
bool isFull()
{
 bool full = true;
 for (int i = 0; i < 4; i++)
 {
  for (int j = 0; j < 4; j++)
  {
   if (arr[i][j] == 0)
   {
    full = false;
   }
  }
 }
 return full;
}

//处理数组函数
void changeArr(int direct)
{
 bool xiaoyici = false;
 bool chendi = false;

 switch (direct)
 {
  //上键 done
 case 0:
 {

     //开始数组操作
     for (int i = 0; i < 4; i++)
     {

      for (int a = 0; a < 4; a++){

       //1先沉底
       for (int b = 0; b < 4; b++)
       {
        for (int m = 0; m < 4; ++m)
        {
         for (int k = m; k < 3; ++k)
         {

          if (arr[k][i] == 0 && arr[k+1][i]!=0)
          {
           chendi = true;
           arr[k][i] = arr[k + 1][i];
           arr[k + 1][i] = 0;
          }
         }
        }
       }
       //2两两比较

        for (int j = a; j < 4; ++j)
        {

        
         if (arr[j][i] != 0 && arr[j][i] == arr[j + 1][i])
         {
          xiaoyici = true;
          arr[j][i] <<= 1;
          arr[j + 1][i] = 0;
          j++;
          a++;

         }
         else
         {
          continue;
         }
        }

      }

     
     }//结束数组操作
     //判断是否死亡
     if (!xiaoyici && isFull())
     {
      MessageBox(g_hwnd, TEXT("你挂掉了"), TEXT("糟糕"), MB_OK);
      SendMessage(g_hwnd,WM_DESTROY,0,0);
     }
     else{
      //随机生成一个新的2或4放入数组
      if (xiaoyici || chendi){ newNum(); }
     }

 }
  break;
  //下键
 case 1:
 {
     //开始数组操作
 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言+win32api写窗体应用程序
  • win32 api实现2048游戏示例
  • win32 api实现简单的消息窗口示例

相关文章

  • 2017-05-28c语言实现的hashtable分享
  • 2017-05-28马尔可夫链算法(markov算法)的awk、C++、C语言实现代码
  • 2017-05-28C语言 选择排序算法详解及实现代码
  • 2017-05-28C语言位运算和sizeof运算符详解
  • 2017-05-28C++ CTreeview的checkbox使用方法
  • 2017-05-28用C++实现一个链式栈的实例代码
  • 2017-05-28shared_ptr线程安全性全面分析
  • 2022-04-30C语言二维数组指针(指向二维数组的指针)详解
  • 2017-05-28详解C++语言中的加法运算符与赋值运算符的用法
  • 2017-05-28C语言 文件操作解析详解及实例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言中#define与typedef的互换细节详解
    • 浅析C语言中strtol()函数与strtoul()函数的用法
    • C语言中常量指针与指针常量区别浅析
    • C++ 中placement new 操作符使用方法
    • 解析C++编程中的选择结构和switch语句的用法
    • 模拟鼠标事件的实现思路及代码
    • 浅析int*p[ ]与int(*p)[ ]的区别
    • 数据结构 多关键字排序
    • 《C++ primer plus》读书笔记(二)
    • 判断指定的进程或程序是否存在方法小结(vc等)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有