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.Graphics;
|
||||||
import javax.microedition.lcdui.Image;
|
import javax.microedition.lcdui.Image;
|
||||||
|
|
||||||
@ -43,6 +44,7 @@ public class Background {
|
|||||||
|
|
||||||
// Сколькигранная звезда?
|
// Сколькигранная звезда?
|
||||||
private static final int STAR_POINTS = 5;
|
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;
|
private int[] night;
|
||||||
@ -54,13 +56,13 @@ public class Background {
|
|||||||
this.w = w;
|
this.w = w;
|
||||||
this.h = h;
|
this.h = h;
|
||||||
night = new int[w*(h/2)];
|
night = new int[w*(h/2)];
|
||||||
setNight(8);
|
setNight(Util.getHour());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Установить затемнение в зависимости от времени суток */
|
/* Установить затемнение в зависимости от времени суток */
|
||||||
public final void setNight(int hour) {
|
public final void setNight(int hour) {
|
||||||
|
if (this.hour == hour) return;
|
||||||
this.hour = hour;
|
this.hour = hour;
|
||||||
if (night[0] == colorsNight[hour]) return;
|
|
||||||
for (int i = 0; i < night.length; i++)
|
for (int i = 0; i < night.length; i++)
|
||||||
night[i] = colorsNight[hour];
|
night[i] = colorsNight[hour];
|
||||||
}
|
}
|
||||||
@ -82,7 +84,7 @@ public class Background {
|
|||||||
/*
|
/*
|
||||||
* Звезда
|
* Звезда
|
||||||
*/
|
*/
|
||||||
public void preDraw(Graphics g) {
|
public void drawStar(Graphics g) {
|
||||||
int color = 0xFF6666;
|
int color = 0xFF6666;
|
||||||
if ((hour > 6) && (hour < 19)) color = 0x994444;
|
if ((hour > 6) && (hour < 19)) color = 0x994444;
|
||||||
g.setColor(color);
|
g.setColor(color);
|
||||||
@ -101,6 +103,19 @@ public class Background {
|
|||||||
g.drawRGB(night, 0, w, 0, h/2, w, h/2, true);
|
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 */
|
/* Рисуем елку высотой height */
|
||||||
private void drawTree(Graphics g, int x, int y, int height) {
|
private void drawTree(Graphics g, int x, int y, int height) {
|
||||||
final int FLOOR = 8; // сколько ярусов у елки
|
final int FLOOR = 8; // сколько ярусов у елки
|
||||||
@ -135,4 +150,5 @@ public class Background {
|
|||||||
}
|
}
|
||||||
g.fillArc(cx-radius/2, cy-radius/2, radius, radius, 0, 360);
|
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_SPEED = 50;
|
||||||
private static final int MAX_SNOW = 50;
|
private static final int MAX_SNOW = 50;
|
||||||
|
|
||||||
|
private boolean autoChangeTime;
|
||||||
private int w, h;
|
private int w, h;
|
||||||
private int hour; // время в часах, для эффектов
|
private int hour; // время в часах, для эффектов
|
||||||
private int speed, wind;
|
private int speed, wind;
|
||||||
@ -24,11 +25,13 @@ public class DrawParticles extends Canvas implements Runnable {
|
|||||||
private Image background;
|
private Image background;
|
||||||
private Vector particles;
|
private Vector particles;
|
||||||
|
|
||||||
|
|
||||||
public DrawParticles() {
|
public DrawParticles() {
|
||||||
setFullScreenMode(true);
|
setFullScreenMode(true);
|
||||||
w = getWidth();
|
w = getWidth();
|
||||||
h = getHeight();
|
h = getHeight();
|
||||||
hour = 8;
|
autoChangeTime = true;
|
||||||
|
hour = Util.getHour();
|
||||||
speed = MIN_SPEED;
|
speed = MIN_SPEED;
|
||||||
wind = (int) Util.random(0, 360);//250;
|
wind = (int) Util.random(0, 360);//250;
|
||||||
Snow.setSpeed(speed);
|
Snow.setSpeed(speed);
|
||||||
@ -44,13 +47,48 @@ public class DrawParticles extends Canvas implements Runnable {
|
|||||||
|
|
||||||
public void paint(Graphics g) {
|
public void paint(Graphics g) {
|
||||||
g.drawImage(background, 0, 0, 20);
|
g.drawImage(background, 0, 0, 20);
|
||||||
bg.preDraw(g);
|
bg.drawStar(g);
|
||||||
// рисуем системы
|
// рисуем системы
|
||||||
for (int i = 0; i < particles.size(); i++) {
|
for (int i = 0; i < particles.size(); i++) {
|
||||||
((ParticleSystem) particles.elementAt(i)).render(g);
|
((ParticleSystem) particles.elementAt(i)).render(g);
|
||||||
}
|
}
|
||||||
// эффекты времени суток
|
// эффекты времени суток
|
||||||
if (Parameters.timeEffects) bg.postDraw(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() {
|
public void run() {
|
||||||
@ -64,7 +102,10 @@ public class DrawParticles extends Canvas implements Runnable {
|
|||||||
timeToChangeWind = System.currentTimeMillis() + (long)(Util.random(5, 30)*1000);
|
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);
|
Snow.setWind(wind);
|
||||||
repaint();
|
repaint();
|
||||||
try {
|
try {
|
||||||
@ -113,13 +154,25 @@ public class DrawParticles extends Canvas implements Runnable {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (key == KEY_NUM1) {
|
if (key == KEY_NUM1) {
|
||||||
|
autoChangeTime = false;
|
||||||
hour--;
|
hour--;
|
||||||
if (hour < 0) hour = 23;
|
if (hour < 0) hour = 23;
|
||||||
|
} else if (key == KEY_POUND) {
|
||||||
|
autoChangeTime = true;
|
||||||
|
hour = Util.getHour();
|
||||||
} else if (key == KEY_NUM3) {
|
} else if (key == KEY_NUM3) {
|
||||||
|
autoChangeTime = false;
|
||||||
hour++;
|
hour++;
|
||||||
if (hour > 23) hour = 0;
|
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/
|
* For more info visit http://annimon.com/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
import javax.microedition.media.Manager;
|
||||||
|
import javax.microedition.media.Player;
|
||||||
|
import javax.microedition.media.PlayerListener;
|
||||||
import javax.microedition.midlet.*;
|
import javax.microedition.midlet.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author aNNiMON
|
* @author aNNiMON
|
||||||
*/
|
*/
|
||||||
public class Main extends MIDlet {
|
public class Main extends MIDlet implements PlayerListener {
|
||||||
|
|
||||||
public Display dsp;
|
public Display dsp;
|
||||||
|
private Player plr;
|
||||||
public static Main midlet;
|
public static Main midlet;
|
||||||
|
|
||||||
public Main() {
|
public Main() {
|
||||||
@ -21,6 +26,7 @@ public class Main extends MIDlet {
|
|||||||
|
|
||||||
public void startApp() {
|
public void startApp() {
|
||||||
DrawParticles dp = new DrawParticles();
|
DrawParticles dp = new DrawParticles();
|
||||||
|
playSound();
|
||||||
dsp.setCurrent(dp);
|
dsp.setCurrent(dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,4 +36,24 @@ public class Main extends MIDlet {
|
|||||||
public void destroyApp(boolean ex) {
|
public void destroyApp(boolean ex) {
|
||||||
notifyDestroyed();
|
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 boolean timeEffects = true;
|
||||||
|
|
||||||
|
/* Отрисовывать интерфейс */
|
||||||
|
public static int drawUI = 0;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import javax.microedition.lcdui.Graphics;
|
import javax.microedition.lcdui.Graphics;
|
||||||
import javax.microedition.lcdui.Image;
|
import javax.microedition.lcdui.Image;
|
||||||
@ -37,6 +38,86 @@ public class Util {
|
|||||||
else return 0;
|
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 контекст графики
|
* @param g контекст графики
|
||||||
@ -109,18 +190,4 @@ public class Util {
|
|||||||
|
|
||||||
return (ca << 24) | (cr << 16) | (cg << 8) | cb;
|
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