5
This commit is contained in:
parent
e586e8230c
commit
c02b178411
@ -1,4 +1,5 @@
|
||||
|
||||
import javax.microedition.lcdui.Font;
|
||||
import javax.microedition.lcdui.Graphics;
|
||||
import javax.microedition.lcdui.Image;
|
||||
|
||||
@ -43,6 +44,7 @@ public class Background {
|
||||
|
||||
// Сколькигранная звезда?
|
||||
private static final int STAR_POINTS = 5;
|
||||
private static final Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
|
||||
|
||||
/* массив пикселей для затемнения экрана */
|
||||
private int[] night;
|
||||
@ -54,13 +56,13 @@ public class Background {
|
||||
this.w = w;
|
||||
this.h = h;
|
||||
night = new int[w*(h/2)];
|
||||
setNight(8);
|
||||
setNight(Util.getHour());
|
||||
}
|
||||
|
||||
/* Установить затемнение в зависимости от времени суток */
|
||||
public final void setNight(int hour) {
|
||||
if (this.hour == hour) return;
|
||||
this.hour = hour;
|
||||
if (night[0] == colorsNight[hour]) return;
|
||||
for (int i = 0; i < night.length; i++)
|
||||
night[i] = colorsNight[hour];
|
||||
}
|
||||
@ -82,7 +84,7 @@ public class Background {
|
||||
/*
|
||||
* Звезда
|
||||
*/
|
||||
public void preDraw(Graphics g) {
|
||||
public void drawStar(Graphics g) {
|
||||
int color = 0xFF6666;
|
||||
if ((hour > 6) && (hour < 19)) color = 0x994444;
|
||||
g.setColor(color);
|
||||
@ -101,6 +103,19 @@ public class Background {
|
||||
g.drawRGB(night, 0, w, 0, h/2, w, h/2, true);
|
||||
}
|
||||
|
||||
/*
|
||||
* Отрисовка интерфейса
|
||||
* lines массив строк для вывода
|
||||
*/
|
||||
public void drawUI(Graphics g, String[] lines) {
|
||||
int fh = font.getHeight();
|
||||
g.setColor(0xFFFF00);
|
||||
g.setFont(font);
|
||||
for (int i = 0; i < lines.length; i++) {
|
||||
g.drawString(lines[i], w/2, i*fh, Graphics.HCENTER | Graphics.TOP);
|
||||
}
|
||||
}
|
||||
|
||||
/* Рисуем елку высотой height */
|
||||
private void drawTree(Graphics g, int x, int y, int height) {
|
||||
final int FLOOR = 8; // сколько ярусов у елки
|
||||
@ -135,4 +150,5 @@ public class Background {
|
||||
}
|
||||
g.fillArc(cx-radius/2, cy-radius/2, radius, radius, 0, 360);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ public class DrawParticles extends Canvas implements Runnable {
|
||||
private static final int MAX_SPEED = 50;
|
||||
private static final int MAX_SNOW = 50;
|
||||
|
||||
private boolean autoChangeTime;
|
||||
private int w, h;
|
||||
private int hour; // время в часах, для эффектов
|
||||
private int speed, wind;
|
||||
@ -24,11 +25,13 @@ public class DrawParticles extends Canvas implements Runnable {
|
||||
private Image background;
|
||||
private Vector particles;
|
||||
|
||||
|
||||
public DrawParticles() {
|
||||
setFullScreenMode(true);
|
||||
w = getWidth();
|
||||
h = getHeight();
|
||||
hour = 8;
|
||||
autoChangeTime = true;
|
||||
hour = Util.getHour();
|
||||
speed = MIN_SPEED;
|
||||
wind = (int) Util.random(0, 360);//250;
|
||||
Snow.setSpeed(speed);
|
||||
@ -44,13 +47,48 @@ public class DrawParticles extends Canvas implements Runnable {
|
||||
|
||||
public void paint(Graphics g) {
|
||||
g.drawImage(background, 0, 0, 20);
|
||||
bg.preDraw(g);
|
||||
bg.drawStar(g);
|
||||
// рисуем системы
|
||||
for (int i = 0; i < particles.size(); i++) {
|
||||
((ParticleSystem) particles.elementAt(i)).render(g);
|
||||
}
|
||||
// эффекты времени суток
|
||||
if (Parameters.timeEffects) bg.postDraw(g);
|
||||
// инфа
|
||||
if (Parameters.drawUI == 1) {
|
||||
String[] lines = new String[] {
|
||||
"Сейчас: ",
|
||||
Util.getTimeString(),
|
||||
Util.getNewYearTimeString(0),
|
||||
Util.getNewYearTimeString(1)
|
||||
};
|
||||
bg.drawUI(g, lines);
|
||||
} else if (Parameters.drawUI == 2) {
|
||||
String[] lines = new String[] {
|
||||
"Параметры",
|
||||
"",
|
||||
"Направление ветра: " + String.valueOf(wind),
|
||||
"Скорость снегопада: " + String.valueOf(speed),
|
||||
"Автосмена ветра: " + (Parameters.autoWind ? "вкл" : "выкл"),
|
||||
"Затемнения: " + (Parameters.timeEffects ? "вкл" : "выкл"),
|
||||
(Parameters.timeEffects && !autoChangeTime) ? ("Время: " + String.valueOf(hour)) : ""
|
||||
};
|
||||
bg.drawUI(g, lines);
|
||||
} else if (Parameters.drawUI == 3) {
|
||||
String[] lines = new String[] {
|
||||
"Автор:",
|
||||
"Виктор aNNiMON Мельник",
|
||||
"",
|
||||
"Управление: ",
|
||||
"Вверх/вниз:", "Скорость снегопада",
|
||||
"Влево/вправо:", "Направление ветра",
|
||||
"1,3 - затемнение", "# - сброс",
|
||||
"7 - Автосмена ветра",
|
||||
"9 - Затемнения",
|
||||
"* - информация",
|
||||
};
|
||||
bg.drawUI(g, lines);
|
||||
}
|
||||
}
|
||||
|
||||
public void run() {
|
||||
@ -64,7 +102,10 @@ public class DrawParticles extends Canvas implements Runnable {
|
||||
timeToChangeWind = System.currentTimeMillis() + (long)(Util.random(5, 30)*1000);
|
||||
}
|
||||
}
|
||||
if (Parameters.timeEffects) bg.setNight(hour);
|
||||
if (Parameters.timeEffects) {
|
||||
if (autoChangeTime) hour = Util.getHour();
|
||||
bg.setNight(hour);
|
||||
}
|
||||
Snow.setWind(wind);
|
||||
repaint();
|
||||
try {
|
||||
@ -113,13 +154,25 @@ public class DrawParticles extends Canvas implements Runnable {
|
||||
break;
|
||||
default:
|
||||
if (key == KEY_NUM1) {
|
||||
autoChangeTime = false;
|
||||
hour--;
|
||||
if (hour < 0) hour = 23;
|
||||
} else if (key == KEY_POUND) {
|
||||
autoChangeTime = true;
|
||||
hour = Util.getHour();
|
||||
} else if (key == KEY_NUM3) {
|
||||
autoChangeTime = false;
|
||||
hour++;
|
||||
if (hour > 23) hour = 0;
|
||||
}
|
||||
System.out.println(hour);
|
||||
else if (key == KEY_STAR) {
|
||||
Parameters.drawUI++;
|
||||
if (Parameters.drawUI > 3) Parameters.drawUI = 0;
|
||||
} else if (key == KEY_NUM7) {
|
||||
Parameters.autoWind = !Parameters.autoWind;
|
||||
} else if (key == KEY_NUM9) {
|
||||
Parameters.timeEffects = !Parameters.timeEffects;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,15 +3,20 @@
|
||||
* For more info visit http://annimon.com/
|
||||
*/
|
||||
|
||||
import java.io.InputStream;
|
||||
import javax.microedition.lcdui.*;
|
||||
import javax.microedition.media.Manager;
|
||||
import javax.microedition.media.Player;
|
||||
import javax.microedition.media.PlayerListener;
|
||||
import javax.microedition.midlet.*;
|
||||
|
||||
/**
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Main extends MIDlet {
|
||||
public class Main extends MIDlet implements PlayerListener {
|
||||
|
||||
public Display dsp;
|
||||
private Player plr;
|
||||
public static Main midlet;
|
||||
|
||||
public Main() {
|
||||
@ -21,6 +26,7 @@ public class Main extends MIDlet {
|
||||
|
||||
public void startApp() {
|
||||
DrawParticles dp = new DrawParticles();
|
||||
playSound();
|
||||
dsp.setCurrent(dp);
|
||||
}
|
||||
|
||||
@ -30,4 +36,24 @@ public class Main extends MIDlet {
|
||||
public void destroyApp(boolean ex) {
|
||||
notifyDestroyed();
|
||||
}
|
||||
|
||||
private void playSound() {
|
||||
try {
|
||||
InputStream is = getClass().getResourceAsStream("/letitsnow.mid");
|
||||
is.read(); is.read();
|
||||
plr = Manager.createPlayer(is, "audio/midi");
|
||||
plr.realize();
|
||||
plr.prefetch();
|
||||
plr.addPlayerListener(this);
|
||||
plr.start();
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void playerUpdate (Player player, String event, Object data) {
|
||||
if (event.equals(PlayerListener.END_OF_MEDIA)) {
|
||||
playSound();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,4 +17,7 @@ public class Parameters {
|
||||
|
||||
/* Эффекты времени суток */
|
||||
public static boolean timeEffects = true;
|
||||
|
||||
/* Отрисовывать интерфейс */
|
||||
public static int drawUI = 0;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Random;
|
||||
import javax.microedition.lcdui.Graphics;
|
||||
import javax.microedition.lcdui.Image;
|
||||
@ -37,6 +38,86 @@ public class Util {
|
||||
else return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить время
|
||||
* @return строка с временем вида: DD.MM.YYYY HH:MM
|
||||
*/
|
||||
public static String getTimeString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
// День
|
||||
int tmp = cal.get(Calendar.DAY_OF_MONTH);
|
||||
if(tmp <= 9) sb.append('0');
|
||||
sb.append(tmp);
|
||||
sb.append('.');
|
||||
// Месяц
|
||||
tmp = cal.get(Calendar.MONTH)+1;
|
||||
if(tmp <= 9) sb.append('0');
|
||||
sb.append(tmp);
|
||||
sb.append('.');
|
||||
// Год
|
||||
tmp = cal.get(Calendar.YEAR);
|
||||
sb.append(tmp);
|
||||
sb.append(' ');
|
||||
// Проверяем, новый ли год
|
||||
if (sb.toString().startsWith("01.01")) {
|
||||
sb.delete(0, sb.length() - 1);
|
||||
sb.append("С Новым Годом!!!! ");
|
||||
}
|
||||
// Час
|
||||
tmp = cal.get(Calendar.HOUR_OF_DAY);
|
||||
if(tmp <= 9) sb.append('0');
|
||||
sb.append(tmp);
|
||||
sb.append(':');
|
||||
// Минута
|
||||
tmp = cal.get(Calendar.MINUTE);
|
||||
if(tmp <= 9) sb.append('0');
|
||||
sb.append(tmp);
|
||||
sb.append(':');
|
||||
// Секунда
|
||||
tmp = cal.get(Calendar.SECOND);
|
||||
if(tmp <= 9) sb.append('0');
|
||||
sb.append(tmp);
|
||||
cal = null;
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить время до Нового года
|
||||
* @param line номер строки
|
||||
* @return массив строк с временем вида: DD/MM/YYYY HH:MM
|
||||
*/
|
||||
public static String getNewYearTimeString(int line) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
if (line == 0) {
|
||||
sb.append("До Нового ").append(cal.get(Calendar.YEAR) + 1).append(" года: ");
|
||||
return sb.toString();
|
||||
}
|
||||
// Месяц
|
||||
int tmp = 11 - cal.get(Calendar.MONTH);
|
||||
if (tmp > 8) return "Еще куча времени!! =)";
|
||||
else if (tmp != 0) sb.append(tmp).append(" мес ");
|
||||
// День
|
||||
tmp = 31 - cal.get(Calendar.DAY_OF_MONTH);
|
||||
if (tmp != 0) sb.append(tmp).append(" дн ");
|
||||
// Час
|
||||
tmp = 23 - cal.get(Calendar.HOUR_OF_DAY);
|
||||
if (tmp != 0) sb.append(tmp).append(" ч ");
|
||||
// Минута
|
||||
tmp = 59 - cal.get(Calendar.MINUTE);
|
||||
if (tmp != 0) sb.append(tmp).append(" м ");
|
||||
// Секунда
|
||||
tmp = 59 - cal.get(Calendar.SECOND);
|
||||
if (tmp != 0) sb.append(tmp).append(" с ");
|
||||
cal = null;
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static int getHour() {
|
||||
int tmp = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
|
||||
return tmp;
|
||||
}
|
||||
/**
|
||||
* Отрисовка вертикального градиента
|
||||
* @param g контекст графики
|
||||
@ -109,18 +190,4 @@ public class Util {
|
||||
|
||||
return (ca << 24) | (cr << 16) | (cg << 8) | cb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить цвет нужного канала в пикселе
|
||||
* @param argb пиксель
|
||||
* @param c символьный параметр - название канала (a, r, g, b)
|
||||
* @return
|
||||
*/
|
||||
private static int acolor(int argb, char c) {
|
||||
if(c=='r') return ((argb >> 16) & 0xff);
|
||||
else if(c=='g') return ((argb >> 8) & 0xff);
|
||||
else if(c=='b') return (argb & 0xff);
|
||||
else if(c=='a') return ((argb >> 24) & 0xff);
|
||||
else return argb;
|
||||
}
|
||||
}
|
||||
|
BIN
src/icon.png
Normal file
BIN
src/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 208 B |
BIN
src/letitsnow.mid
Normal file
BIN
src/letitsnow.mid
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user